当24RGB碰到16RGB如何处理?
编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?fb_var_screeninfo中的width,height是指什么的宽高?这个注释看不明白/*height of picture in mm */ 第一个问题:
5-6-5模式就是 R:G:B = 5-6-5,也即红和蓝的最大值为二进制的 11111,绿为111111。
也就是说 8 bit 的 R 转换为 5 位的 R 只要舍弃掉低3位
也即 R = (R >> 3) G = (G >> 2) B = (B >> 3)
也即:如果 24 位用32位数表示 color (XBGR)
即 16 位 (BGR) 将是 ((color >> 19) & 0xf800) | ((color >> 10) & 0x07e0) | ((color >> 3) & 0x001f)
第二个问题:
以mm为单位的 width 和 height
建议你看看 Framebuffer internal API 〉〉编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?
软件有一个转换算法,图形库都是自己做的。见EGui /src-gui/egui/libegui.c 第一个问题:
5-6-5模式就是 R:G:B = 5-6-5,也即红和蓝的最大值为二进制的 11111,绿为111111。
也就是说 8 bit 的 R 转换为 5 位的 R 只要舍弃掉低3位
也即 R = (R >> 3) G = (G >> 2) B = (B >> 3)
也即:如果 24 位用32位数表示 color (XBGR)
即 16 位 (BGR) 将是 ((color >> 19) & 0xf800) | ((color >> 10) & 0x07e0) | ((color >> 3) & 0x001f)
第二个问题:
以mm为单位的 width 和 height
建议你看看 Framebuffer internal API
舍弃高位还是低位?我推导了一下
如果用比例换算x/256=y/32,那么y=x/8,即x右移3位得到5比特的颜色
有一个问题是:在xp下,用windows的图片浏览器查看一个24bpp的图片为什么在16色桌面和32色桌面设置下都是一样的?
但如果把它设为墙纸,16色下就会颜色失真。这个图片的属性里有一个说明是颜色未校准
问题:
24色深图片转化为16色,如何使颜色损失最小?
页:
[1]