2017-04-17 4 views
0

QGraphicsViewとSceneを使用しています.2つのQGraphicsPixmapアイテムが設定されています。 1つはイメージを表示し、もう1つは透明なpixmapを使用してマーキングを表示します。pixmap上のqpainterの描画を制限する

私は透明なqpixmapを描画するためにqpainterを使用しています。

私は2点の間に描き線を使用していますが、ペン先が丸い点を持つqpenを使用しています。

問題は次のとおりです。

私は、画像の一部が透明であると、一部のPNGイメージをロードした場合、私は画像の透明領域上(ピックスマップをマーキングに)マーキングを無効にします。 qpainterのマーキングの領域を自動的に制限する方法はありますか?

答えて

1

2つのピックスマップを1つのQGraphicsPixmapItemにまとめるのが最も簡単です。次に、単にソース画素がアルファによって減少ソースピクセルのアルファと、先の上に配合される

QPainter::CompositionMode_SourceAtop

ことが必要であろう正しいQPainter::CompositionModeを、使用することができ宛先ピクセル。

例えば:

QPixmap markingPixmap(sourceImage.size()); 
markingPixmap.fill(Qt::transparent); 

{ // scope for painter1 
    QPainter painter1(&markingPixmap); 
    painter1.setPen(...); 
    painter1.drawLine(...); 
} 

QPainter painter(&sourceImage); 
painter.setCompositionMode(QPainter::CompositionMode_SourceAtop); 
painter.drawPixmap(0, 0, markingPixmap); 

(コード未テスト!)


それともあなたもQPainter::drawPixmap()を参照してください、QBitmapを使用することができます。

pixmapがQBitmapの場合は、ペンの色を使って「セット」されたビットで描画されます。 backgroundModeがQt :: OpaqueModeの場合、背景ブラシの色を使用して「未設定」ビットが描画されます。 backgroundModeがQt :: TransparentModeの場合、「unset」ビットは透過的です。グラデーションまたはテクスチャの色を使用してビットマップを描画することはサポートされていません。

(あなたはこれがCompositionModeを尊重した場合に試してみる必要があるだろう。)

関連する問題