У меня есть устаревший код, который записывался в файл NITF для отображения некоторых изображений. В устаревшем коде создается впечатление, что используется LUT, и есть раздел кода, который записывает строку за раз в файл NITF, и значения этой строки вычисляются следующим образом:
// convert RGB to LUT values
unsigned char *lutData = new unsigned char[numBytes/3];
for (unsigned j = 0 ; j < numBytes/3 ; j++)
lutData[j] = (unsigned char) stuff;
Где данные были моим исходным массивом беззнаковых символов.
Итак, теперь я пытаюсь взять этот массив данных и вывести его в QImage в своем графическом интерфейсе.
Мне кажется в NITF был блок данных LUT размером "строки x столбцы", да? Итак, я создал массив этих данных lut:
unsigned char *lutData = new unsigned char[imwidth * imheight];
QImage *qi = new QImage(imwidth,imheight, QImage::Format_Indexed8);
for (int i = 0 ; i < imheight ; i++)
{
#pragma omp parallel for
for (int j = 0 ; j < imwidth ; j++)
{
lutData[i*imwidth + j] = stuff;
}
}
а затем я попытался заполнить qimage следующим образом:
for (int i = 0 ; i < imheight ; i++)
{
#pragma omp parallel for
for (int j = 0 ; j < imwidth ; j++)
{
qi->setPixel(j,i,qRgb(lutData[i*imwidth + j],lutData[i*imwidth + j],lutData[i*imwidth + j]));
}
}
Однако это, кажется, более или менее просто дает мне изображение в градациях серого вместо моих реальных данных.
Что я делаю неправильно?
Спасибо!
data
и сжимает их до одного байта вlutData
. И размерlutData
напрямую связан (x 1/3) с размеромdata
; если бы это была таблица цветов, она не зависела бы от количества пикселей и вместо этого зависела бы от количества цветов ... В каком формате изначально былdata
? Можете ли вы просто использовать исходный массивdata
сQImage::Format_RGB888
? 01.04.2011lutData
(есть удобный Конструктор QImage в случае ширины != шага)? 01.04.2011data
- деление значения в диапазоне [0, 255] дает вам значение в диапазоне [0, 5], зажимая каждый компоненту цвета на один из шести уровней (это также объясняет умножение на 6^X при построенииlutData
— это сдвиг влево, но по другому основанию). Так что, если вы видите размытое изображение, возможно, вы просто видите более точное изображение (если, конечно, вы не хотите зажимать...)! 01.04.2011lutData
. Это не таблица цветов — это массив индексов в таблице цветов — по одному на каждый пиксель. Это означает, что фактическая таблица цветов все еще где-то плавает; это неdata
(полные цвета каждого пикселя) и неlutData
(индексирует в указанную таблицу цветов для каждого пикселя), поэтому это должна быть какая-то другая переменная... Если вы можете ее найти, вы можете сделать свой QImage Indexed8 изlutData
, построить свой QVector‹QRgb› из вашей переменной таблицы цветов, а затем setColorTable()... Вы получите свое старое изображение с зажимом! 01.04.2011