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

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);
}

效果如下:
原始图:
Qt开发 —QImage 的裁剪 和透明化处理_第1张图片
裁剪后的图片:
Qt开发 —QImage 的裁剪 和透明化处理_第2张图片

你可能感兴趣的:(Qt,嵌入式开发,Qt,qt,开发语言)