
| 位图文件头BITMAPFILEHEADER |
| 位图信息头BITMAPINFOHEADER |
| 调色板Palette |
| 实际的位图数据ImageDate |
{
WORD bfType; 指定文件类型,必须是0x424D,即字符串“BM”,
DWORD bfSize; 指定文件大小,包括这14个字节。
WORD bfReserved1; 为保留字,不用考虑
WORD bfReserved2; 为保留字,不用考虑
DWORD bfOffBits; 从文件头到实际的位图数据的偏移字节数,前三个部分的长度之和。
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; 指定这个结构的长度,为40。
LONG biWidth; 指定图象的宽度,单位是象素。
LONG biHeight; 指定图象的高度,单位是象素。
WORD biPlanes; 必须是1,
WORD biBitCount; 指定表示颜色时要用到的位数,1(黑白图), 4(16色), 8(256色), 24(真彩色图)
DWORD biCompression; 压缩格式为BI_RGB
DWORD biSizeImage; 实际的位图数据占用字节, 如果biCompression为BI_RGB则该项可能为零
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed; 指定实际用到的颜色数,如果值为零,则用到的颜色数为2biBitCount
DWORD biClrImportant;
} BITMAPINFOHEADER
typedef struct tagRGBQUAD {
BYTE rgbBlue; //该颜色的蓝色分量
BYTE rgbGreen; //该颜色的绿色分量
BYTE rgbRed; //该颜色的红色分量
BYTE rgbReserved; //保留值
} RGBQUAD;
注意事项:
1.调色板数目的计算
m_PaletteEntries=1<< biBitCount
if (biBitCount>8)
m_PaletteEntries=0
else if (biClrUsed != 0)
PaletteEntries = biClrUsed;
2. MFC调色板的应用
if( m_nPaletteEntries != 0 ){
// Allocate the LOGPALETTE structure.
LOGPALETTE *pLogPal = (LOGPALETTE *) new char
[sizeof(LOGPALETTE)+
m_nPaletteEntries*sizeof(PALETTEENTRY)];
if( pLogPal != NULL ){
// Set the LOGPALETTE to version 0x300
// and store the number of palette
// entries.
pLogPal->palVersion = 0x300;
pLogPal->palNumEntries = m_nPaletteEntries;
// Store the RGB values into each
// PALETTEENTRY element.
for( int i=0; i m_pPalette[i].rgbRed; pLogPal->palPalEntry[i].peGreen = m_pPalette[i].rgbGreen; pLogPal->palPalEntry[i].peBlue = m_pPalette[i].rgbBlue; } // Create the CPalette object and // delete the LOGPALETTE memory. m_Palette.CreatePalette( pLogPal ); delete [] pLogPal; } }
