【问题标题】:QPixmap::fromImage() gives segmentation fault in QX11PixmapDataQPixmap::fromImage() 在 QX11PixmapData 中给出分段错误
【发布时间】:2024-01-04 13:14:01
【问题描述】:

我写了一些或多或少像这样的代码:

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) 是我在 colorTable 中的索引。这在 sn-p 的最后一行崩溃,实际行在一个库中,我看不到名为 QX11PixmapData 的源。我做错了什么导致这个崩溃,还是 Qt 错误?

如果这很重要,我正在运行 CentOS 5.5。

谢谢!

【问题讨论】:

    标签: c++ qt qt4 lookup-tables qimage


    【解决方案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);
    

    由于对于索引彩色图像,扫描线字节与宽度相同。

    【讨论】:

    • 哇..很棒的提示..这确实解决了问题!我永远不会得到这个! +1
    • Ugghh,这是一个令人讨厌的问题!谢谢