![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
Подробности - 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;
Следующая структура - это 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 необходимо вычислить. | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|