我使用char *数组来创建图像,原始数据是PNG。而且我确定它是,因为我可以阅读PNG FILE标题“137 80 78 71 13 10 26 10”
代码如下:
QImage image;
bool ret = image.loadFromData((const uchar*)p->appIcon,p->iconSize, "PNG");
p_button->setIcon(QPixmap::fromImage(image.scaled(ICON_WIDTH,ICON_HIGH)));
....
但运行时出现CRC错误:
libpng error: IDAT: CRC error
QImage::scaled: Image is a null image
Segmentation fault
是否有人可以建议某些原因会导致此错误?非常感谢。
答案 0 :(得分:1)
您正在向loadFromData
提供虚假数据。仅仅因为标题存在,并不意味着其余数据存在。我通常的建议是:将数据转储到文件中,看看是否可以使用图像编辑程序打开它:
QByteArray data((const char*)p->appIcon, p->iconSize);
QFile file(QDir::homePath() + QDir::separator() + "test.png");
bool rc = file.open(QIODevice::WriteOnly);
Q_ASSERT(rc);
qint64 n = file.write(data);
Q_ASSERT(n == data.size());