Qt开发 —QImage 的裁剪 和透明化处理

该文章介绍了如何在Qt开发中对QImage进行透明化处理和裁剪。通过将图片转换为ARGB32格式并设置透明度,然后裁剪掉透明部分,实现有效地裁剪图片并保留有效数据。
摘要由CSDN通过智能技术生成

Qt开发 —QImage 的裁剪 和透明化处理

在开发过程中 我们往往需要对照片裁剪,而裁剪的时候就需要保留有效的数据。那么久需要计算数据在图像中的有效位置以及大小。而采取的方法就是:将图片转化为背景透明,然后在裁剪掉透明部分。

QImage 透明化处理
void ConvertImageToTransparent(QImage &img)
{
	img = img.convertToFormat(QImage::Format_ARGB32);
	union myrgb
	{
		uint rgba;
		uchar rgba_bits[4];
	};
	myrgb* mybits =(myrgb*) img.bits();
	int len = img.width()*img.height();
	while(len --> 0)
	{
		mybits->rgba_bits[3] = (mybits->rgba== 0xFFFFFFFF)?0:255;
		mybits++;
	}
}

裁剪

void RemoveImageTransparent(QImage &img)
{
	QImage p = img;
	int l =p.width(), r = 0, t = p.height(), b = 0;
	for (int y = 0; y < p.height(); ++y) {
		QRgb *row = (QRgb*)p.scanLine(y);

		bool rowFilled = false;
		for (int x = 0; x < p.width(); ++x) {
			if (qAlpha(row[x]) ) {
				rowFilled = true;
				r = std::max(r, x);
				if (l > x) {
					l = x; x = r;
				}
			}
		}
		if (rowFilled) {
			t = std::min(t, y);
			b = y;
		}
	}

	QRect imgRect = QRect(QPoint(l, t), QPoint(r, b));
	img = img.copy(imgRect);
}

效果如下:
原始图:
在这里插入图片描述
裁剪后的图片:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用Qt开发一个图片裁剪和压缩工具。在Qt中,你可以使用QImage类来处理图像。下面是一个简单的示例代码,展示了如何裁剪和压缩图片: ```cpp #include <QApplication> #include <QImage> #include <QPixmap> #include <QFileDialog> #include <QLabel> #include <QPushButton> // 裁剪并压缩图片的函数 void cropAndCompressImage(const QString& imagePath, int targetWidth, int targetHeight, int compressionQuality) { QImage originalImage(imagePath); QImage croppedImage = originalImage.scaled(targetWidth, targetHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation); QString savePath = QFileDialog::getSaveFileName(nullptr, "保存图片", "", "JPEG (*.jpg);;PNG (*.png)"); if (!savePath.isEmpty()) { QPixmap croppedPixmap = QPixmap::fromImage(croppedImage); croppedPixmap.save(savePath, nullptr, compressionQuality); } } int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个按钮,用于触发选择图片和裁剪压缩的操作 QPushButton button("选择并裁剪压缩图片"); // 点击按钮时触发的槽函数 QObject::connect(&button, &QPushButton::clicked, [&]() { QString imagePath = QFileDialog::getOpenFileName(nullptr, "选择图片", "", "Images (*.png *.jpg *.jpeg)"); if (!imagePath.isEmpty()) { cropAndCompressImage(imagePath, 300, 300, 80); // 设置目标宽度、高度和压缩质量 } }); button.show(); return app.exec(); } ``` 请注意,这只是一个简单的示例,你可以根据你的需求进行更多的定制和改进。使用Qt的图像处理功能,你可以实现更复杂的裁剪和压缩操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值