【发布时间】:2020-05-02 18:42:27
【问题描述】:
我有一个 16 位灰度 QImage::Format_Grayscale16 的 unsigned short 值在内存中是连续的。在将QLabel 转换为像素图后,它会正确显示在QLabel 上。我现在需要使用将强度映射到特定 RGB 值的给定颜色表对其进行着色:
QVector<QRgb> table_16;
for (double i = 0; i < 4096; ++i) {
table_16.append(qRgb(
(int)std::round(std::clamp( -4 * std::abs(i - 4095.0 * 3 / 4) + 4095.0 * 3 / 2, 0.0, 4095.0)),
(int)std::round(std::clamp(-4 * std::abs(i - 4095.0 * 2 / 4) + 4095.0 * 3 / 2, 0.0, 4095.0)),
(int)std::round(std::clamp( -4 * std::abs(i - 4095.0 * 1 / 4) + 4095.0 * 3 / 2, 0.0, 4095.0))));
}
table_16[0] = qRgb(4095, 4095, 4095);
注意:图像实际上是 12 位的,但存储方式与 16 位图像相同。因此 RGB 映射的限制为 4096。
很遗憾,我遇到了麻烦。首先,转换为 RGB16 格式是否正确?我发布了另一个非常相似的问题,但针对 8 位灰度。 setColorTable() 的 Qt 文档指出:
仅单色和 8 位格式。
所以我假设我不能将它用于我的 16 位图像。最好的做法是缩小并转换为 8 位吗?任何性能优化都会很好,因为图像应该是实时流式传输的。
【问题讨论】:
标签: qt image-processing qimage image-formats