私は PyQt を使用しており、ディスクからQPixmap
. 以下を使用して、マスクも作成しました。
self.mask = QImage(self.image.width(), self.image.height(), QImage.Format_Mono)
self.mask.fill(0)
表示用に 2 つを組み合わせて、レンダリング時にマスク内の黒く着色されたピクセルが画像上に半透明の赤で描画されるようにします。
次のように、ペイント イベントで画像をレンダリングするカスタム ウィジェットを作成しました。
def paintEvent(self, event):
p = QPainter(self)
r = event.rect()
p.drawPixmap(r, self.image, r)
これはうまくいきます。私があまりはっきりしていないのは、マスク内のデータを取得し、宛先イメージ内のそれらのピクセルのみに半透明の赤をペイントする方法です。
次のように、マスクをクリッピング領域に変えてみました。
mask = QPixmap.fromImage(self.mask.createMaskFromColor(self.mask.color(0)))
p.setClipRegion(QRegion(mask))
color = QColor(255, 0, 0, 128)
p.setPen(Qt.NoPen)
p.setBrush(QBrush(color))
p.drawRect(r)
...しかし、何も描画しません (また、 を呼び出さないと、画像全体に半透明の赤いボックスが描画されますsetClipRegion
)。
また、マスクを として作成し、QImage.Format_ARGB4444_Premultiplied
透明度を使用してみました。これは機能し、プログラムでマスクを編集できますが (マスクの一部が透明で一部が不透明であることを確認します)、self.mask.createAlphaMask()
メソッドは真っ白な四角形を返します。
「マスクの作成」メソッドは実際に何かをしますか?