lilofreeman 发表于 2006-11-3 16:05:23

当24RGB碰到16RGB如何处理?

编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?

fb_var_screeninfo中的width,height是指什么的宽高?这个注释看不明白/*height of picture in mm */

AnthonyLee 发表于 2006-11-4 00:37:49

第一个问题:
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

asmcos 发表于 2006-11-6 09:26:32

〉〉编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?

软件有一个转换算法,图形库都是自己做的。见EGui /src-gui/egui/libegui.c

lilofreeman 发表于 2006-12-31 10:13:14

第一个问题:
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]
查看完整版本: 当24RGB碰到16RGB如何处理?