У меня есть 16-битные оттенки серого QImage::Format_Grayscale16
из unsigned short
значений, смежных в памяти. Он правильно отображается на 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-битные изображения. Отсюда ограничение 4096 для отображения RGB.
К сожалению, у меня проблемы. Во-первых, корректно ли преобразование в формат RGB16? Я разместил еще один очень похожий вопрос, но для 8-битных оттенков серого. Документ Qt для setColorTable()
гласит:
Только монохромные и 8-битные форматы.
поэтому я предполагаю, что не могу использовать это для своего 16-битного изображения. Может быть, лучший способ действий - уменьшить масштаб и преобразовать в 8-битный? Любая оптимизация производительности также была бы отличной, потому что изображения должны передаваться в режиме реального времени.