mieki256's diary



2016/11/14(月) [n年前の日記]

#1 [python] PySideで消しゴムツール

Python + PySide で書いたお絵かきアプリモドキで消しゴムツールを実装できそうか実験。

なんとかできそうな感じになってきた。

_PySideを使って消しゴムツールを実現できそうかテスト - Gist

実行結果。

eraser_tool_test_ss01.png

ちょっと分かりづらいけど、十字っぽいブラシ画像で、キャンバス相当の背景画像の一部を消去できていることが分かる、かなと。かつ、ブラシ画像のアルファチャンネルもそれっぽく反映されてる。

関係ありそうなところだけ抜き出してみると…。
    def erase_brush_pixmap(self):
        u"""ブラシ画像(QPixmap)を消しゴムとして使う."""
        qp = QPainter()
        qp.begin(self.canvas)
        qp.setCompositionMode(QPainter.CompositionMode_DestinationOut)
        x, y = self.brush.width() + 16, 0
        qp.drawPixmap(x, y, self.brush)
        qp.end()
        del qp
        self.canvas_item.setPixmap(self.canvas)

QPainter.setCompositionMode() を使って、描画する時の合成モードを指定できる。

_QPainter - PySide v1.0.7 documentation
_Composition Modes

それぞれどういう効果があるのか、どっちを Source にして、どっちを Destination にすればいいのか、ちょっとよく分からんけど…。色々試してたら、上記のような記述で消しゴムツールっぽい描画になってくれた。

ドキュメントには「QImageじゃないと働かないよ」と書いてあるようにも思えたけど、Windows10 x64 + Python 2.7.12 + PySide 1.2.4 では、QPixmapを指定しても動いてしまったように見える。けど、これでいいのだろうか。自信無し。

以上です。

過去ログ表示

Prev - 2016/11 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project