视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
我的图像的BMP文件信息
2025-09-25 03:14:53 责编:小OO
文档

位图文件头BITMAPFILEHEADER

位图信息头BITMAPINFOHEADER

调色板Palette

实际的位图数据ImageDate

typedef struct tagBITMAPFILEHEADER

 {

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                pLogPal->palPalEntry[i].peRed =

                    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;

            }

        }下载本文

显示全文
专题