将QImage保存到字节数组

时间:2017-07-15 08:14:09

标签: c++ qt

我需要打开一个图像并将其存储到普通数组中。只有打开和获取字节数据,我可以使用Qt,我需要使用普通的c ++。问题是我不知道该怎么做。我已经知道了:

QImage image;
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG"); // writes image into ba in PNG format

但说实话,我不明白它的作用。我打算做的是打开图像,将数据存储到QByteArray,然后将数据写入普通数组。

有人可以帮我理解怎么做吗?

1 个答案:

答案 0 :(得分:0)

我不确定你是否在询问"""要做或者试图了解这段代码中实际发生了什么。我猜它是后者,因此我会尝试解释它。

您有一个QImage,然后您有QByteArray

然后你创建一个QBuffer来获取你之前创建的字节数组作为参数,open它处于只写模式(因为你将数组中的字节。)

QImage有一个函数save,它获取缓冲区和格式(非强制性)。然后将图像转换为字节数组。这是这里的主要技巧,我想这让你感到困惑。

注意:我个人更喜欢将图像文件作为QFile打开,并使用readAll()将其读入原始字节。

QFile* imageFile = new QFile("image.png");
imageFile->open(QIODevice::ReadOnly);
QByteArray ba = imageFile->readAll();
imageFile->close();
delete imageFile;

之后,您甚至可以通过调用ba.data()来访问其原始数据。

我希望有所帮助。

You can read more about QImage::save function here.