QPixmap::fromImage() дает ошибку сегментации в QX11PixmapData

Я написал некоторый код, который выглядит примерно так:

QVector<QRgb> colorTable(256);
 QImage *qi = new QImage(lutData, imwidth,imheight, QImage::Format_Indexed8);

 while (index < 256)
 {
         colorTable.replace(index, qRgb(2552,255, 255));
         index++;
 }
 qi->setColorTable(colorTable);


 QPixmap p(QPixmap::fromImage(*qi,Qt::AutoColor));

поэтому lutData (unsigned char) - это мои индексы в таблице цветов. Это приводит к сбою в последней строке фрагмента, а фактическая строка находится в библиотеке, источник которой я не вижу, называется QX11PixmapData. Что я делаю неправильно, чтобы вызвать этот сбой, или это ошибка Qt?

Я использую CentOS 5.5, если это имеет значение.

Спасибо!


person Derek    schedule 01.04.2011    source источник


Ответы (1)


Конструктор QImage, который вы вызвали:

QImage::QImage ( const uchar * data, int width, int height, Format format )

Для этого требуется, чтобы данные строки развертки были выровнены по 32 битам. Поэтому убедитесь, что это так и в нем достаточно байтов. Или вы можете использовать:

QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

Что позволяет указывать байты на строку сканирования без 32-битного выравнивания. Таким образом, вы можете назвать это так:

QImage *qi = new QImage(lutData, imwidth, imheight, imwidth, QImage::Format_Indexed8);

Поскольку для изображения индексного цвета байты строки сканирования совпадают с шириной.

person Stephen Chu    schedule 01.04.2011
comment
Вау .. отличный совет .. это решило проблему! Я бы никогда не получил это! +1 - person Derek; 01.04.2011
comment
Ухх, ну, это была неприятная проблема! Спасибо - person gpdaniels; 24.04.2014