我正在使用QGraphicsView和Scene來設置兩個QGraphicsPixmap項目。 一個是顯示一些圖像,另一個是透明像素圖,用於顯示標記。通過pixmap限制qpainter的繪製
我使用qpainter繪製透明的qpixmap。
我在兩點之間用qpen在具有某些筆大小的圓角點上使用了劃線。
問題是:
如果我加載某些png圖片,用圖像是透明的某些部分,我想禁止標記(標上的pixmap)在圖像的透明區域中。 有沒有辦法自動限制qpainter的標記區域?
我正在使用QGraphicsView和Scene來設置兩個QGraphicsPixmap項目。 一個是顯示一些圖像,另一個是透明像素圖,用於顯示標記。通過pixmap限制qpainter的繪製
我使用qpainter繪製透明的qpixmap。
我在兩點之間用qpen在具有某些筆大小的圓角點上使用了劃線。
問題是:
如果我加載某些png圖片,用圖像是透明的某些部分,我想禁止標記(標上的pixmap)在圖像的透明區域中。 有沒有辦法自動限制qpainter的標記區域?
將您的兩個像素圖合併成一個單一的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,您將需要嘗試。)