我需要做类似于QPainter::drawImage
的事情,但是绘制给定图片的三角形部分(进入我的小部件的三角形区域),而不是使用矩形。
除了痛苦地试图重绘每个像素之外,我还知道如何做到这一点吗?
感谢您的见解!
答案 0 :(得分:1)
如果你可以使用QPixmap而不是QImage,你可以set a bitmap mask为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通道。例如,您可以使用GIMP轻松创建此文件。我添加了一个alpha通道,将我想要绘制的所有区域更改为透明,将所有其他区域更改为白色。为了减小尺寸,我最终将其转换为索引的2位图像。 您甚至可以使用Qt以编程方式创建蒙版图像,如果您需要根据各种参数计算三角形。