使用QImage将多个.jpg图片裁剪再拼接

有多个QImage,将每个QImage按照各自的leftCut和rightCut左右裁剪值裁剪以后,最后把裁剪以后的QImage拼接到一起。

std::vector<QImage> images;
QImage image;
image.load("1.jpg");
images.push_back(image);

image.load("2.jpg");
images.push_back(image);

image.load("3.jpg");
images.push_back(image);

//假设每个 QImage 的左右裁剪值
std::vector<int> leftCuts = {20, 15, 25};    //左裁剪值
std::vector<int> rightCuts = {30, 25, 35};   //右裁剪值

QImage imageNew = JoinAndCropImages(images, leftCuts, rightCuts);
QImage StarDataView::JoinAndCropImages(const std::vector<QImage>& images, const std::vector<int>& leftCuts, const std::vector<int>& rightCuts)
{
	//计算拼接后图片的宽度
	int totalWidth = 0;
	for (size_t i = 0; i < images.size(); ++i)
	{
		totalWidth += images[i].width() - leftCuts[i] - rightCuts[i];
	}

	//计算拼接后图片的高度(假设所有图片高度相同)
	int totalHeight = images.empty() ? 0 : images[0].height();

	//创建拼接后图片对象
	QImage resultImage(totalWidth, totalHeight, QImage::Format_ARGB32);
	resultImage.fill(Qt::transparent); // 填充透明背景

	//在结果图像上拼接裁剪后的每个图像
	QPainter painter(&resultImage);
	int offsetX = 0;
	for (size_t i = 0; i < images.size(); ++i)
	{
		//裁剪图像
		QImage croppedImage = images[i].copy(leftCuts[i], 0, images[i].width() - leftCuts[i] - rightCuts[i], images[i].height());
		//在结果图像上绘制裁剪后的图像
		painter.drawImage(offsetX, 0, croppedImage);
		//更新 X 偏移量以便绘制下一个图像
		offsetX += croppedImage.width();
	}
	
	return resultImage;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值