C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Подробности - BITMAPINFO / MFC в подробностях / Visual C++

Подробности - BITMAPINFO

В прошлый раз мы рассмотрели структуру BITMAPFILEHEADER. Она идет первая в файле. Вобщем набор структур в заголовке файла выглядит так.

BITMAPFILEHEADER

BITMAPINFO
	BITMAPINFOHEADER
	RGBQUAD

Как видите структура BITMAPINFO - это просто набор двух структур. Она объявлена в файле wingdi.h,

typedef struct tagBITMAPINFO {
	BITMAPINFOHEADER bmiHeader;
	RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;

Итак, первая структура у нас это BITMAPINFOHEADER, она содержит информацию о растре и вот её содержание.

typedef struct tagBITMAPINFOHEADER{
	DWORD biSize;
	LONG biWidth;
	LONG biHeight;
	WORD biPlanes;
	WORD biBitCount;
	DWORD biCompression;
	DWORD biSizeImage;
	LONG biXPelsPerMeter;
	LONG biYPelsPerMeter;
	DWORD biClrUsed;
	DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
  • biSize - размер структуры в байтах и должен быть равен 40 байтам.
  • biWidth & biHeight - содержат высоту и ширину растра в байтах.
  • biPlanes - смысл непонятен, так как здесь всегда 1.
  • biBitCount - число битов на пиксель может быть разное и зависит от типа палитры. Могут быть числа 1,2,4,8,24
  • biCompression - алгоритм сжатия, вот значения:
    0 нет
    1 RLE-8
    2 RLE-4
    
  • biSizeImage - размер растра в байтах и бывает нужно только для сжатых растров.
  • biXPelsPerMeter & biYPelsPerMeter - показывают сколько пикселей на метр, обычно 0 ;-)
  • biClrUsed & biClrImportant - количество используемых цветов и количество значимых цветов. Обычно 0 :-)

Следующая структура - это RGBQUAD описанная в файле wingdi.h. Это не одна структура, а набор структур, которые представляют из себя паритру.

typedef struct tagRGBQUAD {
	BYTE rgbBlue;
	BYTE rgbGreen;
	BYTE rgbRed;
	BYTE rgbReserved;
} RGBQUAD;

Кто знаком с понятием цветов, то это набор цветов RGB, то есть интенсивности составляющей красной, зеленой и синей. Количество структур зависит от типа растра. Если растр на 256 цветов, то и структур будет 256. Цветовая таблица вообще отсутсвует в растрах с 24 битным изображением Hi Color.

Теперь давайте вспомним наш код в шагах. Прочитав первую заголовочную структуру мы присваиваем два одинаковых указателя.

lpInfo=(LPBITMAPINFO)ptrBmp;
lpHeader=(LPBITMAPINFOHEADER)ptrBmp;
lpRGB = (RGBQUAD*)(ptrBmp+lpHeader->biSize); 

Ну и правильно, так как BITMAPINFO и BITMAPINFOHEADER начинаются с одного места и только начало структуры RGBQUAD необходимо вычислить.


| |
Автор Каев Артем.
[AD]