Qt使用loadFromData得到CRC错误

时间:2014-02-25 09:02:40

标签: qt png

我使用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

是否有人可以建议某些原因会导致此错误?非常感谢。

1 个答案:

答案 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());