我将一个3位值RGB表示形式存储在一个16位整数中,方法是根据此处的答案将其移位(将RGB值转换为Integer)。它似乎适用于g
和b
值,但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位整数存储RGB,则只能存储分辨率有限的颜色。通常,红色和蓝色分别使用5位,绿色使用6位。
这曾经很普遍-尽管它确实降低了色彩分辨率,但结果仍然可以用于许多目的(商业图形等,但不能进行像样的照片编辑或对色彩精度至关重要的类似事情)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句