Qt:绘制三角形图像

时间:2012-09-24 19:29:11

标签: qt drawimage qpainter

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

除了痛苦地试图重绘每个像素之外,我还知道如何做到这一点吗?

感谢您的见解!

1 个答案:

答案 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以编程方式创建蒙版图像,如果您需要根据各种参数计算三角形。