繁体   English   中英

将RGB存储在无符号16位整数中

[英]Storing RGB in an unsigned 16bit integer

我将3值RGB表示存储到16位整数中,通过根据此处的答案进行位移( 将RGB值转换为整数 )。 它似乎适用于gb值,但r总是返回0。

我的代码是:

uint16_t rgb = ((r&0x0ff) << 16) | ((g&0x0ff) << 8) | (b&0x0ff);
        qDebug() << "wrote rgb: " << rgb;
        qDebug() << "wrote r: " << r << " g: " << g << " b: " << b;
        qDebug() << "unshifted r: " << ((rgb >> 16) & 0x0ff) << " g: " << ((rgb >> 8) & 0x0ff) << " b: " << (rgb & 0x0ff);

你使用16位int,并将红色值移动16位,所以你实际上只是做r = 0 您实际上是将值移到可用空间的末尾。 要存储三个8位值,您需要至少24位,这意味着您将不得不使用uint32_t。

如果需要以16位整数存储RGB,则只能存储分辨率有限的颜色。 通常,红色和蓝色各使用5位,绿色使用6位。

这曾经相当普遍 - 虽然它确实降低了颜色分辨率,但结果仍然可以用于许多目的(商业图形等,但不是像样的照片编辑或任何类似颜色准确性的事情)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM