Qt QImageWriter类介绍

1.简介

QImageWriter 用于写入图像文件的类。它提供了将 QImage 对象保存到不同图像格式文件的功能,包括但不限于 PNG、JPEG、BMP 等。QImageWriter 可以将图像写入文件,也可以写入任何 QIODevice,如 QByteArray,这使得它非常灵活。

主要特点:

  • 格式支持: 支持多种图像格式,并且可以指定写入的图像格式。
  • 写入控制: 可以通过指定大小、质量、压缩比等选项来控制写入过程。
  • 错误处理: 提供了错误处理机制,可以捕获和处理写入过程中的错误。
  • 元数据支持: 可以设置图像的元数据,如分辨率、注释等信息。

2.常用接口介绍

  • canWrite():判断是否能够写入图像。
  • write():将 QImage 对象写入文件或设备。
  • setFormat():设置写入的图像格式。
  • setQuality():对于支持质量设置的图像格式(如 JPEG),设置图像质量。
  • setCompression():对于支持压缩设置的图像格式(如 PNG),设置图像压缩级别。
  • errorString():获取错误的字符串描述。

3.示例

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QImageReader>
#include <QImageWriter>
#include <QDebug>
#include <QFileDialog>

QImage g_image; //全局的

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
          tr("Open Image"), "D:/", tr("Image Files (*.png *.jpg *.bmp *.jpeg)"));

    if(fileName.isEmpty())
        return;

    QFile file(fileName);
    file.open(QIODevice::ReadOnly);

    QImageReader reader(&file);
    if (!reader.canRead())
    {
       qDebug() << "Cannot read the image";
       return;
    }

    g_image = reader.read();
    if (g_image.isNull())
    {
       qDebug() << "Failed to read the image:" << reader.errorString();
       return;
    }

    ui->lbImage->setPixmap(QPixmap::fromImage(g_image));
}

void Widget::on_pushButton_2_clicked()
{
    if (g_image.isNull())
    {
       qDebug() << "image is null";
       return;
    }

    QFile file("./test.jpg");
    file.open(QIODevice::WriteOnly);

    QImageWriter writer(&file, "jpg");
    writer.setQuality(85); // 设置 JPEG 图像质量为 85%

    if (!writer.write(g_image))
    {
        qDebug() << "Failed to write the image:" << writer.errorString();
        return;
    }
}

4.更多参考

libVLC 专栏介绍-CSDN博客

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客

QCharts -1.概述-CSDN博客

Qt QImageReader类介绍-CSDN博客

相关推荐
小白学大数据12 分钟前
爬虫性能天花板:asyncio赋能 Aiohttp,并发提速 10 倍
开发语言·爬虫·数据分析
凡人叶枫22 分钟前
Effective C++ 条款07:为多态基类声明 virtual 析构函数
linux·c语言·开发语言·c++
凡人叶枫31 分钟前
Effective C++ 条款10:令 operator= 返回一个 reference to *this
java·linux·服务器·开发语言·c++·effective c++
王老师青少年编程40 分钟前
2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-复赛模拟卷6:文末附答案)
c++·答案·模拟卷·复赛·2026年·青少年信息素养大赛·算法应用主题赛
满天星83035771 小时前
【Qt】信号和槽(三) (断开连接和lambda函数)
qt
leo__5201 小时前
MATLAB实现牧羊人算法
开发语言·算法·matlab
视觉小萌新1 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
fpcc1 小时前
C++编程实践—C++实现类似Qt的信号槽机制
c++·qt
格发许可优化管理系统1 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++
郝学胜_神的一滴1 小时前
Qt 高级开发 030:QListWidget 右键菜单全解,从策略配置到精准删除的优雅实现
c++·qt