首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

16位位图颜色转化有关问题

2012-04-13 
16位位图颜色转化问题16位位图biCompression 0.那么应该是555格式,取得两个字节,byte0(低位)byte1(高位)

16位位图颜色转化问题
16位位图biCompression = 0.那么应该是555格式,取得两个字节,byte0(低位)byte1(高位)
使用掩码
r = byte1 & 0x7C >> 2;
g = (byte1 & 0x03 << 3) | (byte0 & 0xE0 >> 5);
b = byte0 & 0x1F;
颜色不正确,是算法不正确?

直接使用这两个字节得到的颜色,整个图片偏蓝色。有哪位知道是什么问题吗?


[解决办法]
RGB的顺序可能颠倒了,换成B=...,G=...,R=...,试试
[解决办法]
参考一下这里:http://www.kalytta.com/bitmap.h
[解决办法]
http://baike.baidu.com/view/17423.htm
RGB555
  RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:
  高字节 低字节
  X R R R R R G G G G G B B B B B (X表示不用,可以忽略)
  可以组合使用屏蔽字和移位操作来得到RGB各分量的值:
  #define RGB555_MASK_RED 0x7C00
  #define RGB555_MASK_GREEN 0x03E0
  #define RGB555_MASK_BLUE 0x001F
  R = (wPixel & RGB555_MASK_RED) >> 10; // 取值范围0-31
  G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值范围0-31
  B = wPixel & RGB555_MASK_BLUE; // 取值范围0-31
[解决办法]
是的,16位转24位需要一个掩码计算,我找一下

探讨

看来16位转24位要通过某种算法补充一些颜色信息才行。

[解决办法]
这是转换宏
C/C++ code
#define RGB555toRGB(rgb555)    ((DWORD)(((BYTE)(((rgb555)>>7)&0xF8)|((WORD)((BYTE)(((rgb555)>>2)&0xF8))<<8))|(((DWORD)(BYTE)(((rgb555)<<3)&0xF8))<<16))) 

热点排行
Bad Request.