Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Загрузка BMP


Автор: kevor13 25.1.2009, 00:12
Итак перелопатив изрядную часть инета я так и  не понял как выполнить на мой взгляд не очень сложную задачу 
На входе: Изображение BMP 24 
на выходе: Массив состоящий из int 

Большинство мануалов на эту тему загружают BMP в char (???)

я был очень благодарен хотя бы описанию как это сделать.. 

PS Здача поставлена для обработки изображения - потом будут применятся фильтры. Может быть Целочисленный массив не лучший выбор? 

PSSЕсли тема уже была удалите и забудьте о ней ) 

Автор: SIRIUStar 25.1.2009, 00:25
PS Здача поставлена для обработки изображения - потом будут применятся фильтры. Может быть Целочисленный массив не лучший выбор? 

Почему же? думаю что выбор как раз удачный) 

думаю что тебе нужно это

typedef struct tagBITMAP {  /* bm */
   int bmType;
   int bmWidth;
   int bmHeight;
   int bmWidthBytes;
   BYTE bmPlanes;
   BYTE bmBitsPixel;
   LPVOID bmBits;
} BITMAP;

поле bmBits содержит указатель на массив растра.

ЗЫ там чказатель на массив байтов(unsigned char).. но ты можешь выцепить от туда инты, нада прыгать через 4 байта по нему))

bmBits
Points to the location of the bit values for the bitmap. The bmBits member must be a long pointer to an array of 1-byte values. 

Автор: Alexeis 25.1.2009, 00:27
Цитата(kevor13 @  24.1.2009,  23:12 Найти цитируемый пост)
на выходе: Массив состоящий из int 

А как собсно с ним работать? 24 бита это 3 байта, int 4 байта. Используя char можно адресовать каждый цвет пикселя, а с интами чего делать? Для интов нужен формат 32 бита на цвет, тогда каждому int у будет соответствовать пиксель. 

Автор: kevor13 25.1.2009, 00:38
то есть работая с чарами какс интами? я просто хочу получить привычный вид от 0 до 255) 

Автор: mes 25.1.2009, 00:41
Цитата(kevor13 @  24.1.2009,  23:38 Найти цитируемый пост)
хочу получить привычный вид от 0 до 255)  

позвольте узнать, а где у Вас с чарами такое не получается ?

Автор: kevor13 25.1.2009, 00:49
все - вопрос снят) все спасибо. 

Автор: SIRIUStar 25.1.2009, 01:02
Цвет всегда кодируется интом. 24 бита это RGB еще 8 это альфо канал. Обычно bmp его не использует. Но есть и 32 разрядные форматы bmp. поэтому по массиву чаров нада прыгать интом. 

Автор: GoldFinch 25.1.2009, 01:22
SIRIUStar, 24разряда это 24 а не 32, читай про .bmp формат и не морочь людям головы

Автор: inside_pointer 25.1.2009, 01:33
читать в трёхбайтовый массив типа unsigned char, а сохранять в unsigned long int, где старший байт == 0 (unsigned чтобы не случилось никаких преобразований потом, когда будешь юзать)

Автор: Dem_max 25.1.2009, 06:36
у 32 разрядного bmp выравнивание данных по 4

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)