有多个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;
}