QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2959|回复: 3

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

[复制链接]
发表于 2006-11-3 16:05:23 | 显示全部楼层 |阅读模式
编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?

fb_var_screeninfo中的width,height是指什么的宽高?这个注释看不明白/*height of picture in mm */
发表于 2006-11-4 00:37:49 | 显示全部楼层
第一个问题:
5-6-5模式就是 R:G:B = 5-6-5,也即红和蓝的最大值为二进制的 11111,绿为111111。
也就是说 8 bit 的 R 转换为 5 位的 R 只要舍弃掉低3位
也即 R[5] = (R[8] >> 3)   G[6] = (G[8] >> 2)   B[5] = (B[8] >> 3)
也即:如果 24 位用32位数表示 color (X[8]B[8]G[8]R[8])
即 16 位 (B[5]G[6]R[5]) 将是 ((color >> 19) & 0xf800) | ((color >> 10) & 0x07e0) | ((color >> 3) & 0x001f)

第二个问题:
以mm为单位的 width 和 height

建议你看看 Framebuffer internal API
回复

使用道具 举报

发表于 2006-11-6 09:26:32 | 显示全部楼层
〉〉编程时都是8-8-8的24RGB,如果显示器支持5-6-5,这个转换是由谁来完成的?framebuffer驱动是否包含这个转换?

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

使用道具 举报

 楼主| 发表于 2006-12-31 10:13:14 | 显示全部楼层
[quote:a64ccb938f="AnthonyLee"]第一个问题:
5-6-5模式就是 R:G:B = 5-6-5,也即红和蓝的最大值为二进制的 11111,绿为111111。
也就是说 8 bit 的 R 转换为 5 位的 R 只要舍弃掉低3位
也即 R[5] = (R[8] >> 3)   G[6] = (G[8] >> 2)   B[5] = (B[8] >> 3)
也即:如果 24 位用32位数表示 color (X[8]B[8]G[8]R[8])
即 16 位 (B[5]G[6]R[5]) 将是 ((color >> 19) & 0xf800) | ((color >> 10) & 0x07e0) | ((color >> 3) & 0x001f)

第二个问题:
以mm为单位的 width 和 height

建议你看看 Framebuffer internal API[/quote]

舍弃高位还是低位?我推导了一下
如果用比例换算x/256=y/32,那么y=x/8,即x右移3位得到5比特的颜色

有一个问题是:在xp下,用windows的图片浏览器查看一个24bpp的图片为什么在16色桌面和32色桌面设置下都是一样的?

但如果把它设为墙纸,16色下就会颜色失真。这个图片的属性里有一个说明是颜色未校准

问题:
24色深图片转化为16色,如何使颜色损失最小?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-28 00:17 , Processed in 0.104266 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表