如何创建一个16位的565格式的位图图形,就是起始的位图数据的掩码如何去指定?

解决方案 »

  1.   

    CreateBitmap可以创建。什么叫做“起始的位图数据的掩码”?
      

  2.   

    to eightbao:
       你说的CreateBitmap创建的位图只能使16位555格式的位图,因为16位有555和565格式之分,当压缩格式为BI_BITFIELDS:有555和565,而区别开这两种格式,就是依靠位图数据区的前三个DWORD值,也叫掩码。
      

  3.   

    当压缩格式为 BI_BITFIELDS 时,在位图信息(即BITMAPINFOHEADER)后面接着三个DWORD型数据,就是掩码数据,
    一般为:0xF800(兰色掩码),0x07E0(绿色掩码),0x001F(红色掩码),这是565的格式
    如果为:0x7C00, 0x03E0, 0x001F, 则是555的格式(这也是bitcount=16,而压缩标志为BI_DIB时的默认格式)
      

  4.   

    TO hhoking:
       如果,我想创建565格式位图,那么就是在bitmapinfoheader后面,紧跟着填入0x7C00, 0x03E0, 0x001F,如下面
    DWORD* ttTT = (DWORD*)(lpBitmapinfohead + 40);
    *ttTT++ = (DWORD)(0xF800);
    *ttTT++ = (DWORD)(0x07E0);
    *ttTT++ = (DWORD)(0x001F00);
    WORD* dest = (WORD*)(lpBitmapinfohead  + 40 + sizeof(DWORD)*3);
            
           然后,给dest赋值?
          也就是说,如果是565格式的位图,那么它的位图数据应该从(lpBitmapinfohead  + 40 + sizeof(DWORD)*3 这里开始码?
      

  5.   

    R:0x0000F800
    G:0x000007E0
    B:0x0000001F数据开始的位置就是LPBITMAPINFOHEADER + 3 * sizeof(DWORD)
      

  6.   

    对,你的理解没错,不过数据不要弄错了,我有笔误,lanstar200是对的,更正:565格式的掩码:
    0xF800(红色掩码),0x07E0(绿色掩码),0x001F(兰色掩码)555格式的掩码:
    0x7C00, 0x03E0, 0x001F,(565)eg:
    DWORD* ttTT = (DWORD*)(lpBitmapinfohead + 40);
    *ttTT++ = (DWORD)(0xF800);
    *ttTT++ = (DWORD)(0x07E0);
    *ttTT++ = (DWORD)(0x001F);
    WORD* dest = (WORD*)(lpBitmapinfohead  + 40 + sizeof(DWORD)*3);(555)就不需要用掩码了,直接设压缩标志为BI_RGB就行了。