基于Qt 的可视化图片处理程序——图片的加载与保存
- Chapter1 基于Qt 的可视化图片处理程序——图片的加载与保存
- 图片的加载
- 图片加载到 Label
- 完整代码
- 图片的保存
- 保存图片
- 完整代码
void MainWindow::loadPixmap()
{
QImage img,image;
QPixmap pixmap;
LoadPicPath = QFileDialog::getOpenFileName(this,tr("选择图片"),"C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
img.load(LoadPicPath);
image = img.scaled(ui->PicLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); // Qt::KeepAspectRatio 按比例缩放 Qt::SmoothTransformation 缩放不失帧
pixmap = QPixmap::fromImage(image);
ui->PicLabel->clear();
ui->PicLabel->setPixmap(pixmap);
}
Chapter1 基于Qt 的可视化图片处理程序——图片的加载与保存
原文链接
图片的加载
点击按钮选择文件
首先要确定,使用 Qt 中 QFileDialog 库中的 getLoadFile 进行选择文件。
代码如下:
LoadPicPath = QFileDialog::getOpenFileName(this,"选择图片","C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
// getOpenFile 参数包含窗口的父类,窗口名称,默认选择地址,和要选择的文件格式
// 设置文件扩展名过滤,注意用双分号间隔
运行效果如下:
图片加载到 Label
在 Qt 中,我们一种最常用的图片加载方式就是使用 QImage 库,此处我们通过 QImage 加载图片,之后通过加载到 QPixmap 中,最终显示在 Label 上
首先声明 QImage 变量,并加载我们指定路径下的图片:
QImage img;
img.load(LoadPicPath);
// LoadPicPath 是我们选择的文件的路径及名称
在成功加载图片之后,我们通过将图加载到 QPixmap 上,最终将图片显示在 Label 上:
image = img.scaled(this->ui->PicLabel->size(),Qt::KeepAspectRatio, Qt::SmoothTransformation);
/*
首先要按照比例合理缩放图片的大小,并且在缩放的过程中要保证图片不失帧
Qt::KeepAspectRatio 按比例缩放 Qt::SmoothTransformation 缩放不失帧
*/
QPixmap pixmap = QPixmap::fromImage(image);
// 在pixmap中加载图片
this->ui->PicLabel->setPixmap(pixmap)
// 将图片显示到 Label 中
运行效果如下:
完整代码
void MainWindow::Load(){ // 加载图片
QImage img;
img.load(LoadPicPath);
w_initial = img.width();
h_initial = img.height();
image = img.scaled(this->ui->PicLabel->size(),Qt::KeepAspectRatio, Qt::SmoothTransformation);
pixmap = QPixmap::fromImage(image);
// Qt::KeepAspectRatio 按比例缩放 Qt::SmoothTransformation 缩放不失帧
this->ui->PicLabel->clear();
this->ui->PicLabel->setPixmap(pixmap);
this->getpixel();
}
void MainWindow::on_actionLoadPic_triggered() // 点击事件
{
if(LoadPicPath == ""){
if_load_save = false;
}
else{
qDebug()<<LoadPicPath;
if_load_save = true;
qDebug()<<"if_load_save = "<<if_load_save;
}
LoadPicPath = QFileDialog::getOpenFileName(this,"选择图片","C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
if(if_load_save){
savedialog->show();
savedialog->exec();
}
else{
// this->init_all();
this->Load();
}
}
图片的保存
点击按钮保存路径
与加载图片的方法一致,使用 getSaveFile 函数选择要保存图片的路径:
MainWindow::SavePicPath = QFileDialog::getSaveFileName(this,"C://Users//ppqpp//Pictures",MainWindow::LoadPicPath,"Pic Files (*);");
运行效果如下:
保存图片
在保存图片之前,我们需要先提取要进行保存的目标图片,通过一种类似于截屏的方式 pixmap()->toImage() 对图片进行提取,然后缩放到原来的大小,最后进行保存
代码如下:
QImage img = this->ui->PicLabel->pixmap()->toImage().scaled(w_initial,h_initial,Qt::KeepAspectRatio, Qt::SmoothTransformation);
img.save(SavePicPath);
完整代码
void SaveDialog::on_pushButton_clicked()
{
MainWindow::SavePicPath = QFileDialog::getSaveFileName(this,"C://Users//ppqpp//Pictures",MainWindow::LoadPicPath,"Pic Files (*);");
this->ui->PathEdit->setText(MainWindow::SavePicPath);
}
void SaveDialog::on_SaveButton_clicked()
{
qDebug()<<"Save new Pic"<<MainWindow::LoadPicPath;
if(this->ui->PathEdit->text() != ""){
emit to_save();
if(MainWindow::if_load_save){
qDebug()<<"if_load_save = "<<MainWindow::if_load_save;
qDebug()<<"save_to_load";
MainWindow::if_load_save = false;
emit save_to_load();
}
this->close();
}
}
void MainWindow::Cover_save(){
qDebug()<<"Cover_save";
QImage img = this->ui->PicLabel->pixmap()->toImage().scaled(w_initial,h_initial,Qt::KeepAspectRatio, Qt::SmoothTransformation);
img.save(SavePicPath);
}