位图文件的格式为:文件头(BITMAPFILEHEADER)+位图信息BITMAPINFO+颜色数据(Bits)。
文件头长度固定为14字节。
位图信息中包括信息头(BITMAPINFOHEADER)和调色板(RGBQUAD[]),单色位图调色板为RGBQUAD[2],16色位图调色板为RGBQUAD[16],256色位图调色板为RGBQUAD[256]。
颜色数据是把所有像素点的颜色或索引值按行从下到上排列存放,每行像素的数据按照4字节的整数倍对齐,不足补0。
32位色位图每像素对应4字节数据;
24位色位图每像素对应3字节数据;
16位色位图每像素对应2字节数据;
256色位图每像素对应1字节数据,以该数据为索引在调色板中取对应颜色,例如0表示该像素颜色为调色板中第0个RGBQUAD表示的颜色;
16色位图每2像素对应1字节数据,前一个像素位于高4位,后一个像素位于低4位,该数据为索引值,索引方法同256色;
单色位图每8像素对应1字节数据,从高位至低位排列,该数据为索引值,索引方法同256色。

解决方案 »

  1.   

    是想问如何根据行、列坐标访问二值图像的数据吧?
    正如楼上说的二值图像每个像素对应一位数据,也就是1个字节存储了8位像素信息。
    可以参考下面的程序:
    for(v=0;v<lHeight;v++)
    {
        for(u=0;u<lWidth;u++)
        {
           lpSrc=(LPBYTE)lpDIBBits+lLineBytes*(lHeight-1-v)+u/8;
           pixel=1<<(7-u%8);
           *lpSrc=*lpSrc|pixel;  //指定位置1
        }
    }
    简单说明一下,lHeight为图像高,lWidth为图像宽度;
    lpDIBBits指向图像数据位的起始位置,lLineBytes为二值图像一行像素所占的字节数。
    因为要对位进行操作,所以需要对该位像素所在的字节进行操作,上面的程序中要
    对第v行和u列的像素置1(指定的位或1运算)
    置0运算可以类推