QImage保存图片 正序和反序
时间: 2023-08-31 14:09:50 浏览: 178
QImage保存图片时,正序和反序的区别在于保存时使用的是不同的文件格式。
正序保存图片时,可以使用如下代码:
```cpp
QImage image;
// ...加载或绘制图片
QString filename = "myimage.jpg"; // 保存为jpg格式
image.save(filename);
```
反序保存图片时,需要将图片先转换为QByteArray,然后使用QFile写入文件:
```cpp
QImage image;
// ...加载或绘制图片
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG"); // 保存为png格式
QFile file("myimage.png");
file.open(QIODevice::WriteOnly);
file.write(byteArray);
file.close();
```
需要注意的是,反序保存图片时需要指定保存的文件格式,而正序保存图片时默认保存为文件名的格式。
相关问题
QImage保存正序的图像
QImage默认保存的是倒序的图像,如果需要保存正序的图像,可以使用QImage的mirrored()函数进行水平镜像,再保存即可。示例代码如下:
```cpp
QImage image("image.png");
QImage mirroredImage = image.mirrored(false, true); // 水平镜像
mirroredImage.save("mirrored_image.png"); // 保存正序图像
```
在mirrored()函数中,第一个参数为是否进行水平镜像,第二个参数为是否进行垂直镜像。因为我们只需要水平镜像,所以第一个参数为false,第二个参数为true。
QImage加载bmp图片,如何判断图片是正序的还是反序的
在使用QImage加载bmp图片时,可以通过读取文件头信息来判断图片的存储方式是正序还是反序。
BMP文件头信息中的biHeight表示图片的高度,如果biHeight是正值,则表示图片是正序存储的;如果biHeight是负值,则表示图片是反序存储的。
具体代码如下:
```cpp
QImage loadImage(const QString& fileName)
{
QImage image;
QFile file(fileName);
if (file.open(QIODevice::ReadOnly))
{
// 读取BMP文件头信息
char header[54];
file.read(header, 54);
// 判断图片存储方式
int height = *(int*)&header[18];
if (height > 0)
{
// 正序存储
image.load(fileName);
}
else
{
// 反序存储
QDataStream stream(&file);
stream.setByteOrder(QDataStream::LittleEndian);
stream.skipRawData(54);
QByteArray data = file.readAll();
image = QImage::fromData((uchar*)data.data(), data.length());
image = image.mirrored(false, true); // 将图片翻转
}
file.close();
}
return image;
}
```
在上述代码中,先读取了BMP文件头信息,然后判断biHeight的值来确定图片的存储方式。如果是正序存储,直接使用QImage的load函数加载图片;如果是反序存储,则需要读取整个文件,使用QImage的fromData函数创建图片,并将其翻转。
阅读全文