请问如何把从屏幕上截取的图象转换成一个特定色彩格式的位图,比如说32位,截取图象时屏幕分辨率不一定是32位的。

解决方案 »

  1.   

    首先,分辨率和图象的位数没关。
    如果我没记错的话,分辨率是指图象显示的点数,而位数是指表示每点图象颜色所用的存储空间的大小(8位.16位.24位等等)只要把bitmap按格式读出,再把比如1个字节的格式强转成4字节存回去就可以了。记得要改文件头。
      

  2.   

    要根据 GetDIBits 取得的 BITMAPINFOHEADER 判断并转换每个像素:如果 biBitCount <= 8 要通过系统调色板取回正确的32位值;如果 biBitCount == 16 or 32 && biCompression == BI_BITFIELDS,BITMAPINFO 结构的 RGBUQAD[0], RGBUQAD[1], RGBUQAD[2], 分别是 DIB 数据的 RedMask, GreenMask 和 BlueMask;如果是 16 位 R5G6B5 格式,mask 应该为 R: 0x0000F800 G: 0x000007E0 B: 0x0000001F 
    Red = (pixel & 0x0000F800) >> 11;
    Green = (pixel & 0x000007E0) >> 5;
    Blue = (pixel & 0x0000001F);如果是 24 位,强制转换为 32 位就可以作为 RedMask, GreenMask 和 BlueMask 分别为 0x00ff0000, 0x0000ff00, 0x0000ff00 的 32 位像素了。
      

  3.   

    如何将24 位的位图或DIB强制转换为 1,2,4,位