Qt之QImageReader

QImageReader类为从文件或设备读取图像提供了一个独立的接口。

读取图像最常用的方法是通过构造QImage和QPixmap,或通过调用QImage::load()和QPixmap::load()。QImageReader是一个专业读取图像的类,可以有更多的控制,例如,可以通过调用setScaledSize()读取图像成特定的大小,通过调用setClipRect()可以选择一个剪辑矩形,有效地只加载图像的一部分。取决于底层支持的图片格式,这可以节省内存,加快加载图片。

话不多说,直接上图
获取描述信息

// 读取图像
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;
}

这时,就会从图像AuthorLogo.jpeg读取所有的描述信息:

"key : Author  value : Mr Wang"
"key : Description  value : Qter"

读取的效果动画图如下:
GIF源图:


GIF源图

每一帧:


Qt之QImageReader_第1张图片
每一帧图片

源码示例

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

输出信息如下:

"Loop Count : -1"
"Number 2 Delay : 90"
"Number 3 Delay : 90"
"Number 4 Delay : 90"
"Number 5 Delay : 90"
"Number 6 Delay : 90"
"Number 7 Delay : 90"
"Number 8 Delay : 90"
"Number 9 Delay : 90"
"Number 10 Delay : 90"
"Number 11 Delay : 90"
"Number 12 Delay : 90"
"Number 13 Delay : 90"
"Number 14 Delay : 90"
"Number 15 Delay : 90"
"Number 16 Delay : 90"
"Number 17 Delay : 90"
"Number 18 Delay : 90"
"Number 19 Delay : 90"
"Number 20 Delay : 90"

QImageWriter、QImageReader一个负责写入、一个负责读取,对于图像的处理有很大帮助。0.0

你可能感兴趣的:(Qt之QImageReader)