qt-salvar imagem no local

qt-salvar imagem no local

  • No Qt, geralmente precisamos salvar imagens em arquivos locais e também podemos precisar criar um diretório antes de salvar as imagens para facilitar o gerenciamento. Este artigo apresentará como usar o Qt para criar um diretório ao salvar imagens e salvar imagens neste diretório.
  • Forneceremos dois exemplos: um é usar a imagem do tipo 'QPixmapcv::Mat.

1. Use uma imagem do tipo QPixmap

Vamos primeiro apresentar como usar imagens do tipo 'QPixmap para implementar a função de criar um diretório ao salvar uma imagem. Aqui está uma função de exemplo que faz isso

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

Neste exemplo, primeiro usamos a classe QDateTime para obter a data e hora atuais e formatá-las em um formato de string. Em seguida, usamos a classe QFileDialog para abrir uma caixa de diálogo de arquivo para selecionar um caminho para salvar o arquivo. Se o usuário escolher um caminho para salvar o arquivo, passamos o caminho do arquivo para o método mkpath() da classe QDir para criar um diretório chamado "image". Em seguida, alteramos o caminho do arquivo para o caminho onde salvamos o arquivo no diretório 'image' e usamos a classe 'QImageWriterQImageWriter para salvar a imagem no arquivo.

2. Use a imagem do tipo cv::Mat

Se estiver salvando uma imagem do tipo cv::Mat, você pode convertê-la em um QImage e, em seguida, usar um QImageWriter para salvá-la em um arquivo.
Aqui está uma função de exemplo:

#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);
}
  • Neste exemplo, primeiro convertemos cv::Matuma imagem do tipo para QImage. Em seguida, seguimos os mesmos passos do exemplo anterior, usando QFileDialoga caixa de diálogo abrir arquivo para selecionar o caminho para salvar o arquivo, criar um diretório chamado "imagem" e QImageWritersalvar a imagem no arquivo usando a classe.
  • Observe que, como o formato padrão de cv::Mat é BGR e o formato padrão de QImage é RGB, precisamos usar o rgbSwapped()método para conversão RGB/BGR.
  • Usamos QImageno quarto parâmetro do construtor static_cast<int>(image.step)para obter o número de bytes por linha da imagem. Use rgbSwapped()o método de conversão RGB/BGR para garantir que a imagem seja salva com as cores corretas.

おすすめ

転載: blog.csdn.net/ljn1046016768/article/details/129791536