写一个拼接图片的工具

说在前边

有时候需要截取长内容的图,但却限于屏幕尺寸不得不一张一张截取,那么怎么可以获取一张长图片呢?换一种想法怎么拼成一张长图片呢?当然是图片拼接了。

新建工程并且调整界面

只需要编写中间小窗口即可。

写一个拼接图片的工具

点击加载图片

选取六张图片。

写一个拼接图片的工具

每一张大小都一样,用之前写的截屏工具批量截取的。

写一个拼接图片的工具

加载需要拼接的照片

写一个拼接图片的工具

拼接

点击拼接,拼接完成如下:

写一个拼接图片的工具

拼接结果

写一个拼接图片的工具

代码:

为了效率限制20张照片的拼接。

void JointImg::on_open_clicked()
{
 list.clear();
 list=QFileDialog::getOpenFileNames(this,"Select","","*.png *.jpg *.jpeg *.bmp");
 int len=list.length();
 if(len>0&&len<20){
 ui->listWidget->clear();
 ui->showmsg->setText(QString("已加载:%1").arg(len));
 ui->listWidget->addItems(list);
 }else if(len>20){
 ui->listWidget->clear();
 ui->listWidget->addItems(list.mid(0,19));
 ui->showmsg->setText(QString("已加载:20"));
 } else{
 ui->showmsg->setText(QString("无"));
 }
}

拼接

void JointImg::on_joint_clicked()
{
 if(list.length()>0){ 
 int w=0;
 int h=0;
 QImage *img;
 foreach(QString s,list){
 img=new QImage(s);
 w=img->width()>w?img->width():w;
 h+=img->height();
 img->~QImage();
 }
 QImage *imgout=new QImage(int(w),int(h),QImage::Format_RGB32);
 QPainter *painter=new QPainter(imgout);
 int y=0;
 foreach(QString s,list){
 img=new QImage(s);
 painter->drawImage(0,int(y),*img);
 y+=img->height();
 img->~QImage();
 }
 painter->end();
 imgout->save("outImg.png");
 img=0;
 imgout=0;
 ui->showmsg->setText(QString("完成!"));
 }
} 

主要步骤

  1. 其实就是获取每张照片的宽和高,然后根据拼接方式计算出生成照片的宽和高;

  2. 读取每张图片内容,写入到新图片。

  3. 保存新图片。

其实总共没几行代码。



分享到:


相關文章: