Я хочу найти синие области на 24-битном изображении BMP. Как я могу найти канал с синим цветом? Каковы способы доступа к каналу с синим цветом?Blue Color Channel на bmp 24-битный формат файла
ответ
Пиксельный формат 24-бит (24bpp) поддерживает 16777216 различных цветов и хранит значение 1 пиксель на 3 байта. Каждое значение пикселя определяет красные, зеленые и синие образцы пикселя (8.8.8.0.0 в RGBAX ). В частности, в порядке (синий, зеленый и красный, 8 бит на каждого образца).
... from here.
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. Надеюсь это поможет!
Что вы пробовали? Как вы получаете доступ к растровому изображению? Вручную? Через библиотеку? Пожалуйста, разместите код. –