Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить цвет пикселя из палитры BMP 8bit

36K
18 августа 2011 года
Pcrepair
64 / / 16.01.2011
Добрый день!
Нужна помощь в разработке кода процедуры
как известно, в BMP 8bit файле на пиксель приходиться байт, в котором хранится число, соответсвующее цвету в палитре. в то же время в палитре каждому цвету соответсвует 4-е байта (BGR)
Вопрос:
1. каким образом по числу, хранящимуся в байте пикселя, происходит сопоставление с блоком из 4-х байт в палитре, соотвествующих цвету. при отображении пикселя на TImage
2. каким может быть код процедуры, обработка нажатия на кнопку
- ввод числа в TEdit (аналог числа в байте пикселя)
нажимаем на кнопку
- поиск в палитре
- вывод значений 4-х байт в TLabel (к примеру)
- или вывод ошибки (такого цвета нет в палитре)
Самостоятельно что то с трудом представляю как это можно сделать
Спасибо за внимание
14
18 августа 2011 года
Phodopus
3.3K / / 19.06.2008
это индекс в палитре естественно
36K
19 августа 2011 года
Pcrepair
64 / / 16.01.2011
Цитата: Phodopus
это индекс в палитре естественно



что такое индекс в данном контексте?
палитра состоит из 4-х байтных блоков (BGRA) в каждом блоке есть три байта с данными о уровне яркости цветового сигнала
палитра идет с 54 по 1078 байт БМП-файла, далее начинается массив пикселей. с 0 по 53 байт идут данные о файле

так где там индекс? каким образом данные к примеру 0xEC содержащиеся в байте пикселя соответсвуют блоку из 4-х байт в палитре? непонятно

10
19 августа 2011 года
Freeman
3.2K / / 06.03.2004
Все структуры описаны в MSDN, а в Delphi объявлены в модуле Windows. TBitmapInfo, например. Как уже писал, все они штатно используются в TBitmap.LoadFromStream и связанных с ним процедурах. Зачем изобретать велосипед?
36K
19 августа 2011 года
Pcrepair
64 / / 16.01.2011
мне не велосипед нужен
мне нужно совсем другое, еще раз:
допустим есть байт пикселя с индексом? 236 или 0хEC в массиве пикселей
ему соответсвуют 4-байта BGRA в палитре
мне нужно получить значения этих байт в числовом формате
ну типа,
пиксел = 0xEC, соответсвующие ему значения цветов в палитре
B = 0x44
G = 0x55
R = 0x66
каким образом определить какому индексу соответсвуют цвета?
палитра занимает с 54 по 1078 байт в файле, может нужно разбить это пространство на блоки по 4-е байта, назначить каждому блоку свой номер-индекс в 16-й системе и это и будет соответсвие между индексом в байте пикселя и индексом в палитре?
14
19 августа 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: Pcrepair

палитра занимает с 54 по 1078 байт в файле, может нужно разбить это пространство на блоки по 4-е байта


1078 - 54 = 1024 / 4 = 256.

Цитата: Pcrepair

назначить каждому блоку свой номер-индекс в 16-й системе и это и будет соответсвие между индексом в байте пикселя и индексом в палитре?


вы знаете что такое массив? И при чем тут 16-я система? :) Номер можно назначить в любой системе, они будут одинаковы. Правильно сказать соответствие величины в байте изображения индексу в палитре.
Вердикт: естественно.
ПС. И почему вы еще этого просто не попробовали?

36K
19 августа 2011 года
Pcrepair
64 / / 16.01.2011
то есть готовых решений пока еще нет? никто такого еще не делал?

Тогда что то типа:
надо записать в массив байты с 54 по 1078 из БМП файла, и если код в байте пикселя = 00, тогда использовать 54...57 байты массива как искомое значение, ну и далее....
а это точно?
10
19 августа 2011 года
Freeman
3.2K / / 06.03.2004
Pcrepair, подберите себе другое занятие. Программирование -- не для вас.
36K
19 августа 2011 года
Pcrepair
64 / / 16.01.2011
не боги горшки разбивают
раз такой заслуженный труженик
просто напиши код, наверняка для тебя это не составит труда
14
21 августа 2011 года
Phodopus
3.3K / / 19.06.2008
короче ты в посте №5 очень близок к решению
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог