2017-04-17 128 views
0

我正在使用QGraphicsView和Scene來設置兩個QGraphicsPixmap項目。 一個是顯示一些圖像,另一個是透明像素圖,用於顯示標記。通過pixmap限制​​qpainter的繪製

我使用qpainter繪製透明的qpixmap。

我在兩點之間用qpen在具有某些筆大小的圓角點上使用了劃線。

問題是:

如果我加載某些png圖片,用圖像是透明的某些部分,我想禁止標記(標上的pixmap)在圖像的透明區域中。 有沒有辦法自動限制qpainter的標記區域?

回答

1

將您的兩個像素圖合併成一個單一的QGraphicsPixmapItem將是最容易的。然後,你可以簡單地使用正確的QPainter::CompositionMode,這將需要

QPainter::CompositionMode_SourceAtop

源像素混合在目標之上,與源像素的由阿爾法降低阿爾法目標像素。

例如爲:

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); 

(!代碼未經測試)


或者你甚至可以用一個QBitmap,看到QPainter::drawPixmap()

如果像素圖是QBitmap,則它使用筆顏色「設置」的位繪製。如果backgroundMode是Qt :: OpaqueMode,則使用背景刷的顏色繪製「未設置」位;如果backgroundMode是Qt :: TransparentMode,則「未設置」位是透明的。不支持使用漸變或紋理顏色繪製位圖。

(如果這方面考慮CompositionMode,您將需要嘗試。)