unsigned long rgb16_to_rgb32(unsigned short a) {
/* 1. Extract the red, green and blue values */
/* from rrrr rggg gggb bbbb */
unsigned long r = (a & 0xF800) >11;
unsigned long g = (a & 0x07E0) >5;
unsigned long b = (a & 0x001F);
/* 2. Convert them to 0-255 range: There is more than one way. You can just shift them left: to 00000000 rrrrr000 gggggg00 bbbbb000
r <<= 3;
g <<= 2;
b <<= 3;
But that means your image will be slightly dark and off-colour as white 0xFFFF
will convert to F8,FC,F8 So instead you can scale by multiply and divide:
*/
r = r * 255 / 31;
g = g * 255 / 63;
b = b * 255 / 31;
/* This ensures 31/31 converts to 255/255 */
/* 3. Construct your 32-bit format (this is 0RGB):*/
return (r << 16) | (g << 8) | b;
/* Or for BGR0: return (r << 8) | (g << 16) | (b << 24); */
}
RGB16 转换Rgb32
最新推荐文章于 2024-09-11 20:03:34 发布