2012-09-24 115 views
1

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

任何想法我可以做到这一点,除了痛苦地试图重绘每个像素?

感谢您的见解!

回答

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编程创建遮罩图像。

+0

谢谢你的回答!我会看这个并回到这里。 – Seub

+0

嗨,再次感谢您的回答。不幸的是,我不认为这对我想做的事情会很好。首先,因为我希望以编程方式确定三角形遮罩,这可能会非常棘手。其次,因为我想绘制成千上万的三角形,所以我需要做一些非常有效的事情。我想我应该问一个更准确的问题,我可能会尽快这样做,我为你占用一些时间而道歉,好吧,你告诉我一些可能有用的东西:) – Seub