【问题标题】:Qt Using loadFromData got CRC errorQt 使用 loadFromData 得到 CRC 错误
【发布时间】:2014-02-26 00:30:20
【问题描述】:

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

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

【问题讨论】:

    标签: qt png


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

    【讨论】:

    • 当我将数据转储到文件时,我得到了不可读的文件和相同的 CRC 错误。这是大小问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2014-11-16
    • 2013-09-28
    • 2019-02-20
    相关资源
    最近更新 更多