2012-01-09 4 views
0

Я хочу найти синие области на 24-битном изображении BMP. Как я могу найти канал с синим цветом? Каковы способы доступа к каналу с синим цветом?Blue Color Channel на bmp 24-битный формат файла

+1

Что вы пробовали? Как вы получаете доступ к растровому изображению? Вручную? Через библиотеку? Пожалуйста, разместите код. –

ответ

0

Пиксельный формат 24-бит (24bpp) поддерживает 16777216 различных цветов и хранит значение 1 пиксель на 3 байта. Каждое значение пикселя определяет красные, зеленые и синие образцы пикселя (8.8.8.0.0 в RGBAX ). В частности, в порядке (синий, зеленый и красный, 8 бит на каждого образца).

... from here.

2

24-битное растровое изображение (.bmp) имеет заголовок 54 байта. После этого появляется pixeldata. В пикселях используются 3 байта: синий, зеленый, красный, в указанном порядке.

Чтобы увидеть это, сделайте изображение размером 1 × 1 в краске и сделайте один пиксель синим. Если вы просмотрите файл .bmp в шестнадцатеричном коде, вы увидите, что 55-й байт имеет значение FF (синий), а 2 после этого - 00 (зеленый, красный). Конечно, вы также можете увидеть это, если напишите программу на C, которая читает все байты. Если вы напечатаете значения с 55-го байта до конца, вы увидите то же самое.

Пиксельдаты должны быть выровнены, это называется шаг. Страйд рассчитывается следующим образом:

stride = (width * bpp)/8; 

В 3x3 BMP, шаг будет (3 * 24)/8 = 9. Это значение должно быть округлено до целого ряда делится на 4 (12 в этом случае) , поэтому вам нужно 3 дополнительных байта на строку, чтобы правильно выровнять биты. Так что, если все байты синего цвета, после 54 байт вы будете иметь:

FF 00 00 FF 00 00 FF 00 00 00 00 00 
FF 00 00 FF 00 00 FF 00 00 00 00 00 
FF 00 00 FF 00 00 FF 00 00 00 00 00 

Для 4x4 BMP, походкой = (4 * 24)/8 = 12. 12 делится на 4, так что нет никаких дополнительных байт. Для 5x5 bmp, stride = (5 * 24)/8 = 15, поэтому для каждой строки требуется 1 дополнительный байт.

Чтобы узнать больше о формате файла bmp, ознакомьтесь с this wikipedia page. Надеюсь это поможет!