寫一個拼接圖片的工具

說在前邊

有時候需要截取長內容的圖,但卻限於屏幕尺寸不得不一張一張截取,那麼怎麼可以獲取一張長圖片呢?換一種想法怎麼拼成一張長圖片呢?當然是圖片拼接了。

新建工程並且調整界面

只需要編寫中間小窗口即可。

寫一個拼接圖片的工具

點擊加載圖片

選取六張圖片。

寫一個拼接圖片的工具

每一張大小都一樣,用之前寫的截屏工具批量截取的。

寫一個拼接圖片的工具

加載需要拼接的照片

寫一個拼接圖片的工具

拼接

點擊拼接,拼接完成如下:

寫一個拼接圖片的工具

拼接結果

寫一個拼接圖片的工具

代碼:

為了效率限制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. 保存新圖片。

其實總共沒幾行代碼。



分享到:


相關文章: