2

我将 3 值 RGB 表示形式存储为 16 位整数,方法是根据此处的答案(将 RGB 值转换为整数)进行位移。它似乎适用于gandb值,但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);
4

2 回答 2

5

您正在使用 16 位 int,并将红色值移动 16 位,因此您实际上只是在做r = 0. 您实际上是在将您的价值观转移到可用空间的尽头。要存储三个 8 位值,您至少需要 24 位,这意味着您必须改用 uint32_t。

于 2013-09-25T15:17:13.683 回答
5

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

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

于 2013-09-25T15:17:21.970 回答