說在前邊
有時候需要截取長內容的圖,但卻限於屏幕尺寸不得不一張一張截取,那麼怎麼可以獲取一張長圖片呢?換一種想法怎麼拼成一張長圖片呢?當然是圖片拼接了。
新建工程並且調整界面
只需要編寫中間小窗口即可。
點擊加載圖片
選取六張圖片。
每一張大小都一樣,用之前寫的截屏工具批量截取的。
加載需要拼接的照片
拼接
點擊拼接,拼接完成如下:
拼接結果
代碼:
為了效率限制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("完成!"));
}
}
主要步驟
其實就是獲取每張照片的寬和高,然後根據拼接方式計算出生成照片的寬和高;
讀取每張圖片內容,寫入到新圖片。
保存新圖片。
其實總共沒幾行代碼。
閱讀更多 愛生活Favorite 的文章