Как получить цвет пикселя из палитры BMP 8bit
Нужна помощь в разработке кода процедуры
как известно, в BMP 8bit файле на пиксель приходиться байт, в котором хранится число, соответсвующее цвету в палитре. в то же время в палитре каждому цвету соответсвует 4-е байта (BGR)
Вопрос:
1. каким образом по числу, хранящимуся в байте пикселя, происходит сопоставление с блоком из 4-х байт в палитре, соотвествующих цвету. при отображении пикселя на TImage
2. каким может быть код процедуры, обработка нажатия на кнопку
- ввод числа в TEdit (аналог числа в байте пикселя)
нажимаем на кнопку
- поиск в палитре
- вывод значений 4-х байт в TLabel (к примеру)
- или вывод ошибки (такого цвета нет в палитре)
Самостоятельно что то с трудом представляю как это можно сделать
Спасибо за внимание
это индекс в палитре естественно
Цитата: Phodopus
это индекс в палитре естественно
что такое индекс в данном контексте?
палитра состоит из 4-х байтных блоков (BGRA) в каждом блоке есть три байта с данными о уровне яркости цветового сигнала
палитра идет с 54 по 1078 байт БМП-файла, далее начинается массив пикселей. с 0 по 53 байт идут данные о файле
так где там индекс? каким образом данные к примеру 0xEC содержащиеся в байте пикселя соответсвуют блоку из 4-х байт в палитре? непонятно
Все структуры описаны в MSDN, а в Delphi объявлены в модуле Windows. TBitmapInfo, например. Как уже писал, все они штатно используются в TBitmap.LoadFromStream и связанных с ним процедурах. Зачем изобретать велосипед?
мне нужно совсем другое, еще раз:
допустим есть байт пикселя с индексом? 236 или 0хEC в массиве пикселей
ему соответсвуют 4-байта BGRA в палитре
мне нужно получить значения этих байт в числовом формате
ну типа,
пиксел = 0xEC, соответсвующие ему значения цветов в палитре
B = 0x44
G = 0x55
R = 0x66
каким образом определить какому индексу соответсвуют цвета?
палитра занимает с 54 по 1078 байт в файле, может нужно разбить это пространство на блоки по 4-е байта, назначить каждому блоку свой номер-индекс в 16-й системе и это и будет соответсвие между индексом в байте пикселя и индексом в палитре?
Цитата: Pcrepair
палитра занимает с 54 по 1078 байт в файле, может нужно разбить это пространство на блоки по 4-е байта
1078 - 54 = 1024 / 4 = 256.
Цитата: Pcrepair
назначить каждому блоку свой номер-индекс в 16-й системе и это и будет соответсвие между индексом в байте пикселя и индексом в палитре?
вы знаете что такое массив? И при чем тут 16-я система? :) Номер можно назначить в любой системе, они будут одинаковы. Правильно сказать соответствие величины в байте изображения индексу в палитре.
Вердикт: естественно.
ПС. И почему вы еще этого просто не попробовали?
Тогда что то типа:
надо записать в массив байты с 54 по 1078 из БМП файла, и если код в байте пикселя = 00, тогда использовать 54...57 байты массива как искомое значение, ну и далее....
а это точно?
Pcrepair, подберите себе другое занятие. Программирование -- не для вас.
раз такой заслуженный труженик
просто напиши код, наверняка для тебя это не составит труда
короче ты в посте №5 очень близок к решению