qt-保存图像到本地

qt-保存图像到本地

  • 在Qt中,我们经常需要将图像保存到本地文件中,同时也可能需要在保存图像之前创建一个目录以方便管理。本文将介绍如何使用Qt在保存图像时创建目录,并将图像保存到该目录中。
  • 我们将提供两种示例:一种是使用 'QPixmapcv::Mat类型的图像。

1、使用QPixmap类型的图像

我们将首先介绍如何使用 'QPixmap类型的图像来实现在保存图像时创建目录的功能。以下是一个实现该功能的示例函数

Copy code
#include <QPixmap>
#include <QFileDialog>
#include <QDateTime>
#include <QDir>
#include <QImageWriter>

void saveImage(QPixmap pixmap)
{
    // 获取当前日期和时间并将其格式化为字符串格式
    QString dateTime = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss");

    // 将文件名设置为当前时间
    QString fileName = "image-" + dateTime + ".png";

    // 打开文件对话框以选择文件保存路径
    QString filePath = QFileDialog::getSaveFileName(nullptr, "Save Image", fileName, "Images (*.png *.bmp *.jpg)");

    if (!filePath.isEmpty()) {
        // 创建目录
        QString directory = QFileInfo(filePath).dir().path() + "/image";
        QDir().mkpath(directory);

        // 在目录中保存图像到文件
        filePath = directory + "/" + fileName;
        QImageWriter writer(filePath);
        writer.setFormat("PNG"); // 指定图像格式
        writer.write(pixmap.toImage());
    }
}

在此示例中,我们首先使用QDateTime类获取当前日期和时间,并将其格式化为字符串格式。然后,我们使用QFileDialog类打开文件对话框以选择文件保存路径。如果用户选择了文件保存路径,则我们将文件路径传递给QDir类的mkpath()方法来创建名为 “image” 的目录。接下来,我们将文件路径更改为在 “image” 目录中保存文件的路径,并使用 'QImageWriterQImageWriter类将图像保存到文件中。

2、 使用cv::Mat类型的图像

如果您要保存cv::Mat类型的图像,可以将其转换为QImage,然后使用QImageWriter将其保存到文件中。
以下是一个示例函数:

#include <QPixmap>
#include <QFileDialog>
#include <QDateTime>
#include <QDir>
#include <QImageWriter>
#include <QImage>

void saveImage(cv::Mat image)
{
    // 将 cv::Mat 转换为 QImage
    QImage qimage(image.data, image.cols, image.rows, static_cast<int>(image.step), QImage::Format_RGB888);
    qimage = qimage.rgbSwapped(); // 进行 RGB/BGR 转换

    // 获取当前日期和时间并将其格式化为字符串格式
    QString dateTime = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss");

    // 将文件名设置为当前
    QString fileName = "image-" + dateTime + ".png";

	// 打开文件对话框以选择文件保存路径
	QString filePath = QFileDialog::getSaveFileName(nullptr, "Save Image", fileName, "Images (*.png *.bmp *.jpg)");

	if (!filePath.isEmpty()) {
	    // 创建目录
	    QString directory = QFileInfo(filePath).dir().path() + "/image";
	    QDir().mkpath(directory);
	
	    // 在目录中保存图像到文件
	    filePath = directory + "/" + fileName;
	    QImageWriter writer(filePath);
	    writer.setFormat("PNG"); // 指定图像格式
	    writer.write(qimage);
}
  • 在此示例中,我们首先将 cv::Mat 类型的图像转换为 QImage。然后,我们遵循与上一个示例相同的步骤,使用 QFileDialog 打开文件对话框选择文件保存路径,创建名为 “image” 的目录,并使用 QImageWriter 类将图像保存到文件中。
  • 请注意,由于cv::Mat的默认格式是 BGR,而QImage的默认格式是 RGB,因此我们需要使用rgbSwapped()方法进行 RGB/BGR 转换。
  • 我们在 QImage 构造函数的第四个参数中使用了 static_cast<int>(image.step) 来获取图像每行的字节数。使用 rgbSwapped() 方法进行 RGB/BGR 转换,以确保图像保存时颜色正确。
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿箭柠檬茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值