Color16值的C++ Unicode

Eva*_*ake -3 c++ unicode

这是一个令人头痛的问题.我搜索了一切,发现很少,对unicode知之甚少,从搜索中学到了一点.我需要的是非常简单的,对吧?我正在使用的结构需要COLOR16.

所以我知道0x0000和0x00FF是0到255,这对COLOR16来说是没用的.

我看到的每个可以代表0到15的四个零.

我知道COLOR16代表所有16 ^ 4种颜色.

但我不能为我的生活弄清楚如何将(R:100; G:35; B:42)转换为unicode值.

我真的可以使用这方面的一些信息,或教程或任何东西.

谢谢.

pad*_*ddy 6

我知道你在找什么.你只是问错了方法.您的意思是short值,而不是Unicode值.这个的通用名称是RGB565.这意味着红色为5位,绿色为6位,蓝色为5位.

最多可加16位.你打包这样的位:

unsigned short val = ((r<<8) & 0xf800) | ((g<<3) & 0x07e0) | (b>>3);
Run Code Online (Sandbox Code Playgroud)

这些位是这样的:

R  00000000 12345xxx  ->  12345000 00000000  (shift left by 8 and masked)
G  00000000 123456xx  ->  00000123 45600000  (shift left by 3 and masked)
B  00000000 12345xxx  ->  00000000 00012345  (shift right by 3, no mask required)
Run Code Online (Sandbox Code Playgroud)

显然,在这个过程中信息丢失了.您只需要使用颜色中最重要的部分并使用它.这就像有损压缩,但是当你没有注意到颜色定义的损失时,它对视频非常有用.绿色获得额外位的原因是因为人眼对该光谱中的颜色更敏感.

  • @john在问题的上下文中,我很确定这只是对数据类型大小的混淆,假设16位数字始终是“unicode字符”。 (2认同)