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; } } } ```
';