QImageReader 读取图片信息
最后更新于:2022-04-02 02:13:32
[TOC]
## 概述
- 读取图像最常用的方法是通过构造QImage和QPixmap,或通过调用QImage::load()和QPixmap::load()。
- QImageReader是一个专业读取图像的类
## 示例
### 设置格式
```
QImageReader reader;
reader.setFormat("png");
// 同reader.setFormat("PNG");
```
### 查询图片信息读取
```
QImageReader reader(":/image.png");
if (reader.supportsOption(QImageIOHandler::Size))
qDebug() << "Size:" << reader.size();
```
### 支持格式
```
QByteArray imageFormat(const QString & fileName)
获取文件名对应的图片格式
QByteArray imageFormat(QIODevice * device)
获取设备对应的图片格式
QList supportedImageFormats()
获取支持的图片格式
QList supportedMimeTypes()
获取支持的Mime类型
```
### 获取描述信息
```
// 读取图像
QImageReader reader;
reader.setFileName("AuthorLogo.jpeg");
if (reader.canRead())
{
// 读取图片
QImage image = reader.read();
// 获取描述信息
QStringList keys = reader.textKeys();
QString strValue("");
foreach (QString strKey, keys)
{
strValue = reader.text(strKey).toLocal8Bit();
qDebug() << QString("key : %1 value : %2").arg(strKey).arg(strValue);
}
}
else
{
// 获取错误信息
QImageReader::ImageReaderError error = reader.error();
QString strError = reader.errorString();
qDebug() << "Last Error : " << strError;
}
```
### 读取动画
```
QImageReader reader;
reader.setFileName(":/Images/loading");
if (reader.supportsAnimation())
{
// 动画循环的次数
int nLoopCount = reader.loopCount();
qDebug() << QString("Loop Count : %1").arg(nLoopCount);
int nCount = reader.imageCount();
for (int i = 0; i < nCount; ++i)
{
// 跳到顺序号为i的图像
bool ret = reader.jumpToImage(i);
if (reader.canRead())
{
// 读取图像
QImage image = reader.read();
// 保存图像
image.save(QString("Loading%1.jpeg").arg(i + 1));
// 下一帧动画等待的毫秒数
int nDelay = reader.nextImageDelay();
qDebug() << QString("Number %1 Delay : %2").arg(i + 2).arg(nDelay);
}
else
{
// 获取错误信息
QImageReader::ImageReaderError error = reader.error();
QString strError = reader.errorString();
qDebug() << "Last Error : " << strError;
}
}
}
```
';