1

我需要做一些类似的事情QPainter::drawImage,但绘制给定图片的三角形部分(到我的小部件的三角形区域中)而不是使用矩形。

除了痛苦地尝试重绘每个像素之外,我知道我该怎么做吗?

感谢您的见解!

4

1 回答 1

2

如果您可以使用 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 以编程方式创建遮罩图像。

于 2012-09-24T19:44:50.507 回答