Seub
Seub

Reputation: 3212

Qt : draw triangle image

I need to do something similar to QPainter::drawImage, but drawing a triangle part of the given picture (into a triangular region of my widget) instead of working with rectangles.

Any idea how I could do that, besides painfully trying to redraw every pixel?

Thanks for your insights!

Upvotes: 1

Views: 3995

Answers (1)

Andreas Fester
Andreas Fester

Reputation: 36649

If it is feasible for you to use a QPixmap instead of a QImage, you can set a bitmap mask for the QPixmap which defines which of the pixels are shown and which are transparent:

myPixmap->setMask(myTriangleMask);
painter->drawPixmap(myPixmap);

Here is another solution based on 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 is an image file with the same size as Sample.jpg. It contains an alpha channel to support transparency. You can create this file easily with The GIMP, for example. I added an alpha channel, changed all areas I want to have painted to transparent and all other areas to white. To reduce the size, I finally converted it to an indexed 2-bit image. You could even create the mask image programmatically with Qt, if you need your triangle be computed based on various parameters.

Upvotes: 2

Related Questions