Канал синего цвета в 24-битном формате BMP - PullRequest
0 голосов
/ 09 января 2012

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

Ответы [ 2 ]

2 голосов
/ 09 января 2012

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

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

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

stride = (width * bpp) / 8;

В 3x3 bmp, шаг будет (3 * 24) / 8 = 9. Это значение должно быть округлено до числа, кратного 4 (12 в этомcase), поэтому вам нужно 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, stepde = (4 * 24) / 8 = 12. 12 делится на 4, так что естьдополнительные байты не нужны.Для 5x5 bmp, stride = (5 * 24) / 8 = 15, поэтому для каждой строки требуется 1 дополнительный байт.

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

0 голосов
/ 09 января 2012

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

... от здесь .

...