zoukankan      html  css  js  c++  java
  • Qt之QImageWriter

    简述

    QImageWriter类为写入图像至文件或设备提供了一个独立的接口。QImageWriter支持格式特定的选项(如:质量和压缩率),可以在存储图像之前进行设置。如果不需要这些选项,可以使用QImage::save()或QPixmap::save()代替。

    常用接口

    公共函数

    • void setFileName(const QString & fileName)
      为fileName设置文件名。在内部,QImageWriter将创建一个QFile,以只写模式( QIODevice::WriteOnly)打开它,并使用此文件写入图像。

    • void setFormat(const QByteArray & format)
      设置写入图像时的格式,格式不区分大小写。

    QImageWriter writer;
    writer.setFormat("png");  
    // 同writer.setFormat("PNG");
    • void setText(const QString & key, const QString & text)
      设置与key相关的文本。用于一些有用的信息,例如:版权信息、关于图像的其它描述信息。

    • bool supportsOption(QImageIOHandler::ImageOption option) const
      如果writer支持选项option,返回true;否则返回false。

      不同的图像格式支持不同的选项。调用此函数,可以确定当前格式是否支持一个特定的选项。例如:PNG格式允许嵌入文字到图像的元数据(见text())。

    QImageWriter writer(fileName);
    if (writer.supportsOption(QImageIOHandler::Description))
        writer.setText("Author", "Mr Wang");
    • void setQuality(int quality)
      设置图像格式的质量。

      quality的取值范围依赖于图像格式。例如:JPEG格式支持从0(低视觉质量,高压缩率)到100(高视觉质量,低压缩率)范围。

    • bool canWrite() const
      如果QImageWriter可以写入图像(即:图像格式支持,同时设备也可以写入)调用canWrite() 时会返回true

    • bool write(const QImage & image)
      将图像写入文件或设备,如果写入时出现任何错误,将返回false,可以调用error() 来查找发生错误的类型,或者通过errorString()获取可读性的描述。

    • ImageWriterError error() const
      返回上次发生的错误 - 错误类型。

    QImageWriter::ImageWriterError枚举值:

    常量 描述
    QImageWriter::DeviceError 1 QImageWriter写入图像数据时遇到设备错误,详细请查看设备问题。
    QImageWriter::UnsupportedFormatError 2 Qt不支持的请求图像格式。
    QImageWriter::UnknownError 0 未知错误。如果调用write()后得到这个值,最有可能是QImageWriter的一个Bug。

    - QString errorString() const
    返回上次发生的错误 - 可读描述。

    静态函数

    • QList<QByteArray> supportedImageFormats()
      获取支持的图片格式

    • QList<QByteArray> supportedMimeTypes()
      获取支持的Mime类型

    QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats();
    QList<QByteArray> mimeTypes = QImageWriter::supportedMimeTypes();

    信息如下:

    // imageFormats : ("bmp", "cur", "dds", "icns", "ico", "jp2", "jpeg", "jpg", "pbm", "pgm", "png", "ppm", "tif", "tiff", "wbmp", "webp", "xbm", "xpm")
    
    // mimeTypes : ("", "image/bmp", "image/jp2", "image/jpeg", "image/png", "image/tiff", "image/vnd.microsoft.icon", "image/vnd.wap.wbmp", "image/webp", "image/x-dds", "image/x-icns", "image/x-portable-bitmap", "image/x-portable-graymap", "image/x-portable-pixmap", "image/x-xbitmap", "image/x-xpixmap")

    示例

    效果

    这里写图片描述 这里写图片描述

    源码

    // 源图像
    QImage image(":/Images/logo");
    
    // 目标图像
    QImageWriter writer("AuthorLogo.jpeg", "jpeg");
    if (writer.supportsOption(QImageIOHandler::Description))
    {
        // 设置描述信息
        writer.setText("Author", "Mr Wang");
        writer.setText("Description", "Qter");
    }
    writer.setQuality(100);
    if (writer.canWrite())
    {
        // 写入图片至文件AuthorLogo.jpeg
        writer.write(image);
    }
    else
    {
        // 获取错误信息
        QImageWriter::ImageWriterError error = writer.error();
        QString strError = writer.errorString();
        qDebug() << "Last Error : " << strError;
    }

    这时,就会根据源图像(:/Images/logo资源文件)生成一张名为AuthorLogo.jpeg的图像,并且图像里面包含”Author”“以及”Description”对应的信息。

    为什么图片上看不到呢?(⊙o⊙)…这时因为保存的信息在图片的数据中,而并非直接绘制在图片上。

    既然有QImageWriter,当然也会有对应的读取相关的类QImageReader,至于如何读取,敬请期待。。。下节更精彩。

    注意:

    • 图一:setQuality(100),质量很高,压缩率小(很大:131KB)。
    • 图二:setQuality(0),质量很低,压缩率高(很小:9.69KB)。
  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/itrena/p/5938307.html
Copyright © 2011-2022 走看看