如何表示18位颜色深度16位色彩深度?(How to represent 18bit color d

2019-07-29 08:44发布

我移植,从16位色彩深度打造以18位色深的软件。 我怎么能转换16位色18位色? 谢谢。

Answer 1:

如果不知道该设备,我只能猜测。 设备通常是红,绿,蓝所以每个颜色会得到变化的6位。 这意味着每个颜色和总共262,144种颜色的64种组合。

任何位图还可以扩展到该显示。 如果你把每个组件(比如,红色),规范它,然后乘以64,你将有缩放版本。

如果你问别的东西或想了解更多细节,请询问。

更新:
有两个16位位图格式。 一个是5-5-5(每像素5位),另一种是5-6-5(绿色得到一个额外的位)。 我假设5-5-5此转换的缘故。

对于每个像素内的每一颜色你需要的东西是这样的:

NewColor = (oldColor/32.0)*64

这将打开旧颜色分为0.0和1.0之间的数字,然后将其放大到新的值的范围。



Answer 2:

假定16位的颜色是在5-6-5格式:

// RRRRR-GGGGGG-BBBBB, 16bit -->

//RRRRR0-GGGGGG-BBBBB0, 18bit with the formula below:
Color18 = ((Color16 & 0xF800) << 2) | ((Color16 & 0x07E0) << 1) | ((Color16 & 0x1F) << 1);


Answer 3:

我没有看到这个盖在其他的答案,但是你想从5到6位的转换是这样的,二进制11111被映射到111111,因为两者都代表全上 。 要做到这一点的方法之一是复制领先位(S)。

red6 = (red5 << 1) | (red5 >> 4);

如果您使用的是算术转换,记住,最大的值是31和63,而不是32和64。

red6 = (red5 * 63 + 15) / 31; // all ints, +15 is for rounding

如果你关心其它中间值,例如,如果你想16映射32其一是调节式(例如,改变15〜14)或只是做一个表。



Answer 4:

要回答这个问题转换

我不熟悉C ++库图像,但我敢肯定,这个的代码已经存在某处。 但是,如果你愿意,你可以自己做。

每个像素有三个通道:红色,绿色和蓝色。 在一个16位的位图,每一个信道不具有相同数目的每个信道的位。 通常情况下,绿色是第一个拿到任何额外的比特,因为人眼对这种颜色最敏感的。

这也可能是565 - 蓝色5红,绿色6,和5。

对于一个18位的位图(如前所述),每个信道具有6个比特。 因此,绿色是很容易! 就在从16位格式拷贝值到18位格式。 其他两个信道是稍硬。 你必须插5至6:

18_Value = (16_Value / 32) * 64 //integers only of course.  You need to round properly to get best results.

有你有它。 如果您还不熟悉下,我建议你研究它们:

  • 位移位运算符
  • 位图跨越
  • 指针数学
  • 字节对齐

- 编辑 - 确保你知道事情是如何在内存布局; RGB或BGR。 它会惹你的头,如果你做任何事情比这更复杂,你向后想着它(因为绿色是中间它并不适合这种转换很重要)。



Answer 5:

你将首先得来访问每个色彩分量(即提取R值,G值,和B值)。 要做到这一点的方式将完全取决于颜色存储在内存中的方式。 如果它被保存为RGB,具有5-6-5位的组件,你可以使用这样的事情:

blueComponent  = (colour & 0x1F);
greenComponent = (colour >> 5 ) & 0x3F;
redComponent   = (colour >> 11) & 0x1F;

这将提取的颜色分量你,则可以使用以上概述的方法,以各成分(I假定18位将使用每个组件6个比特)的转换:

blueComponent  = (blueComponent  / 32.0) * 64;
//greenComponent = (greenComponent / 64.0) * 64;    // not needed
redComponent   = (redComponent   / 32.0) * 64;

请注意,上面的代码,则需要使用32.0,或将确保你的计划是作为一个浮点数数一些其他的方法是很重要的。 然后将部件组合成的18位彩色,使用方法:

colour = (redComponent << 12) | (greenComponent << 6) | blueComponent;


文章来源: How to represent 18bit color depth to 16bit color depth?