QImage加载bmp图片,如何判断图片是正序的还是反序的
时间: 2024-05-12 17:14:34 浏览: 232
判断图片加载
在使用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函数创建图片,并将其翻转。
阅读全文