У меня есть 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 do c для setColorTable()
сообщает:
Только моно chrome и 8-битные форматы.
, поэтому я предполагаю, что не могу используйте это для моего 16-битного изображения. Является ли лучший курс действий, возможно, уменьшить и преобразовать в 8 бит? Любая оптимизация производительности также была бы отличной, потому что изображения должны передаваться в реальном времени.