1

と同様のことを行う必要がありますがQPainter::drawImage、長方形を操作する代わりに、指定された画像の三角形の部分を (ウィジェットの三角形の領域に) 描画します。

すべてのピクセルを痛々しく再描画しようとする以外に、どうすればそれを行うことができるか考えていますか?

あなたの洞察に感謝します!

4

1 に答える 1

2

QImage の代わりに QPixmap を使用できる場合は、どのピクセルを表示し、どのピクセルを透明にするかを定義する 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 と同じサイズの画像ファイルです。透明度をサポートするアルファ チャネルが含まれています。このファイルは、たとえば GIMP を使用して簡単に作成できます。アルファチャンネルを追加し、ペイントしたいすべての領域を透明に、他のすべての領域を白に変更しました。サイズを小さくするために、最終的にインデックス付きの 2 ビット イメージに変換しました。さまざまなパラメーターに基づいて三角形を計算する必要がある場合は、Qt を使用してプログラムでマスク イメージを作成することもできます。

于 2012-09-24T19:44:50.507 に答える