说在前边
有时候需要截取长内容的图,但却限于屏幕尺寸不得不一张一张截取,那么怎么可以获取一张长图片呢?换一种想法怎么拼成一张长图片呢?当然是图片拼接了。
新建工程并且调整界面
只需要编写中间小窗口即可。
点击加载图片
选取六张图片。
每一张大小都一样,用之前写的截屏工具批量截取的。
加载需要拼接的照片
拼接
点击拼接,拼接完成如下:
拼接结果
代码:
为了效率限制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 的文章