QT中的原始位图到png

时间:2014-01-11 12:03:44

标签: c++ qt qtgui qimage qbytearray

我有bytearray,其中每三个字节描述1个像素(RGB)。任务是将其转换为jpeg或png。我从socket接收图像调色板,从我拥有的RGB表构建其相关的RGB24。

我遇到的问题是我现在无法将此位图转换为png。例如:

image.loadFromData((const char*)bytes);
qDebug() << image.save("/home/saman/image.png");

如果不是这样,另一个选择是将png标头添加到位图数组中。但是,我不知道该怎么做。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

这两行有几个问题:

  • 未按照official documentation:指定启动器的保存格式。

    QImage图像; QByteArray ba; QBuffer缓冲区(&amp; ba); buffer.open(QIODevice中::只写); image.save(&amp; buffer,“PNG”); //以PNG格式将图像写入ba

  • 未指定加载格式。

  • 您正在使用C ++代码进行 C类型转换

  • 由于QByteArray超载,你正在不必要地进行演员表。

  • 您正在转换为char *,而对该特定重载的期望是 unsigned char *。

  • 您不检查加载操作的返回值。

    QImage图像; QByteArray ba; QBuffer缓冲区(&amp; ba); buffer.open(QIODevice中::只写); image.save(&amp; buffer,“PNG”); //以PNG格式将图像写入ba

所以,在你的情况下,我会写这样的东西:

if (!image.loadFromData((const char*)bytes, QImage::Format_RGB888))
    qDebug() << "Could not load the image";

if (!image.save("/home/saman/image.png"), "PNG"))
    qDebug() << "Could not save the image";

当然,您还需要确保图像的宽度和高度正确,否则,原始数据只是顺序的,而且类实例无法真正神奇地弄明白。

答案 1 :(得分:0)

似乎我shoudav使用构造函数来提及使用的bytesPerLine。

  QImage *image =new QImage((const uchar*)bytes.constData(),600, 800,1800,QImage::Format_RGB888);

现在提到的每行字节数一切正常。