繁体   English   中英

在QT中将原始位图转换为png

[英]raw bitmap to png in QT

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

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

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

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

有人有什么想法吗?

在这两行中有几个问题:

  • 未根据官方文档指定用于启动器的保存格式

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

  • 未指定加载格式。

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

  • 由于QByteArray重载,您不必要地进行了强制转换。

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

  • 您不检查装入操作的返回值。

    QImage图片; QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice中::只写); image.save(&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";

当然,您还需要确保图像的宽度和高度正确,因为否则,原始数据只是顺序的,并且类实例无法真正神奇地找出来。

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

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

每行字节数,现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM