Конструктор qRgb выглядит следующим образом:
qRgb(int r, int g, int b)
Вы передаете одинаковое значение (lutData[i*imwidth + j]
) для всех трех цветов, так что в итоге вы получите изображение в оттенках серого.
Теперь qRgb - это просто typedef
ed unsigned int
, поэтому, если вы храните свои цвета в этом формате (RGB32 / ARGB32), вы можете просто позвонить:
qi->setPixel(j, i, lutData[i*imwidth + j])
Но вы можете захотеть использовать встроенную в QImage поддержку поиска таблицы (она же таблица цветов) - это может закончиться так просто:
QImage image(data, imwidth, imheight, QImage::Format_Indexed8);
QVector<QRgb> colorTable;
// Translate each color in lutData to a QRgb and push it onto colorTable;
image.setColorTable(colorTable);
Надеюсь, этоhelp!
Обновление: Для справки вот тестовый код, который я использовал, чтобы опробовать QImage в режиме индексированного цвета (компилируется без предупреждений с помощью g ++ - просто не забудьте связать с -lQtCore и -lQtGui):
#include <QtCore/QVector>
#include <QtGui/QApplication>
#include <QtGui/QImage>
#include <QtGui/QLabel>
#include <QtGui/QPixmap>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
unsigned char indices[1024];
for(int i = 0; i < 1024; ++i)
{
indices[i] = qrand() & 0x0f;
}
QVector<QRgb> ctable;
for(int i = 0; i < 16; ++i)
{
ctable.append(qRgb(qrand() & 0xff, qrand() & 0xff, qrand() & 0xff));
}
QImage image(indices, 32, 32, QImage::Format_Indexed8);
image.setColorTable(ctable);
QLabel label;
label.setPixmap(QPixmap::fromImage(image));
label.show();
return app.exec();
}