寫一個拼接圖片的工具

說在前邊

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

新建工程並且調整界面

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

點擊加載圖片

選取六張圖片。

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

加載需要拼接的照片

拼接

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

拼接結果

代碼:

為了效率限制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("完成!"));

}

}

主要步驟

其實就是獲取每張照片的寬和高,然後根據拼接方式計算出生成照片的寬和高;

讀取每張圖片內容,寫入到新圖片。


保存新圖片。

其實總共沒幾行代碼。