我需要做一些类似的事情QPainter::drawImage
,但绘制给定图片的三角形部分(到我的小部件的三角形区域中)而不是使用矩形。
除了痛苦地尝试重绘每个像素之外,我知道我该怎么做吗?
感谢您的见解!
如果您可以使用 QPixmap 而不是 QImage,您可以为 QPixmap设置位图掩码,该掩码定义显示哪些像素以及哪些像素是透明的:
myPixmap->setMask(myTriangleMask);
painter->drawPixmap(myPixmap);
这是另一个基于 QImage 的解决方案:
MaskWidget::MaskWidget(QWidget* parent) : QWidget(parent) {
img = QImage("Sample.jpg"); // The image to paint
mask = QImage("Mask.png"); // An indexed 2-bit colormap image
QPainter imgPainter(&img);
imgPainter.drawImage(0, 0, mask); // Paint the mask onto the image
}
void MaskWidget::paintEvent ( QPaintEvent * event ) {
QPainter painter(this);
painter.drawImage(10, 10, img);
}
Mask.png 是一个与 Sample.jpg 大小相同的图像文件。它包含一个支持透明度的 Alpha 通道。例如,您可以使用 The GIMP 轻松创建此文件。我添加了一个 alpha 通道,将我想要绘制的所有区域更改为透明,将所有其他区域更改为白色。为了减小尺寸,我最终将其转换为索引的 2 位图像。如果您需要根据各种参数计算三角形,您甚至可以使用 Qt 以编程方式创建遮罩图像。