Сопоставление массива двойных символов с QImage

У меня есть двойной указатель char на dataBuffer [1000] [1000] в этом указателе char, в некоторых местах я сделаю шестнадцатеричное значение 0xFF, а оставшееся 0x00 (для построения графиков openGL)

теперь я хочу, чтобы он отображал его как QWidget с шестнадцатеричным значением в пикселях.

Я нашел QImage, мы можем сопоставить 1000x1000 пикселей, но я не знаю, как сопоставить шестнадцатеричное значение char с пикселями.

пожалуйста, помогите мне, заранее спасибо.


person Wagmare    schedule 17.03.2013    source источник


Ответы (1)


Вы можете попробовать сделать следующее:

Сначала создайте QImage из своего буфера, используя этот конструктор: QImage(const uchar* data, int width, int height, Format format), используя QImage::Format_Indexed8 как format, т.е.

QImage img(dataBuffer, 1000, 1000, QImage::Format_Indexed8)

Во-вторых, инициализировать карту преобразования цветов: она должна быть QVector<QRgb>, поэтому вам нужно сделать что-то вроде этого:

QVector<QRgb> colorMap(256);
colorMap[255] = QRgb(255, 255, 255); // Any color of your choice
// probably some other mappings

Затем используйте QImage::convertToFormat вот так:

QImage converted = img.convertToFormat(QImage::Format_RGB32, colorMap)

Это преобразует его в RGB. В принципе, все, теперь вы можете нарисовать это изображение на своем виджете или сохранить его в файл.

person user2155932    schedule 17.03.2013
comment
Сначала спасибо за лучший ответ ур .. но я столкнулся с некоторыми проблемами в реализации логики ур. QVector ‹QRgb› colorMap (256); colorMap [255] = QRgb (255, 255, 255); выдает мне ошибку: список выражений обрабатывается как составное выражение в функциональном приведении [-F premissive] .. не могли бы вы помочь мне разобраться с этим .. еще раз спасибо :) - person Wagmare; 19.03.2013
comment
Я исправил это, сэр ... for (int row = 0; row ‹2048; row ++) for (int column = 0; column‹ 2048; column ++) {m_dataArray [row] [column] = 0x00; } QImage img (* m_dataArray, 2048, 2048, QImage :: Format_Indexed8); QVector ‹QRgb› цветной (256); colortable [255] = qRgb (255,255,255); QImage convert = img.convertToFormat (QImage :: Format_RGB32, colortable); m_graphicsScene- ›addPixmap (QPixmap :: fromImage (преобразованный)); - person Wagmare; 19.03.2013
comment
Спасибо user2155932 за ответ. это то, что я сделал массив беззнаковых символов с двойным понтером unsigned char ** m_dataArray; и я нарисовал его как pastebin.com/vVRetzPA, но изображение выглядит немного странно, так как на нем есть белые пятна на черном изображение. Пожалуйста, помогите мне решить эту проблему. . - person Wagmare; 19.03.2013