2016年10月25日火曜日

C#のGraphicsで透過色を描き込む

何回も忘れて必要になるたびにググってるのでメモ。

C#のGraphicsは完全に透明な色で何かを書くと、何も書かれない、という挙動になっている。ペイントソフトで切り抜いてPNGの透過みたいなことができない。

それをやりたいときはCompositingModeを変更する。デフォルトではSourceOverだが、SourceCopyに設定すれば透過を描き込むことができる。

Graphics.CompositingMode プロパティ (System.Drawing)


あとあんまり関係ないけど、Clipboard.SetImage/GetImageでは透過はやり取りできないみたい。少なくともC#から透過率100%の画像をクリップボードに入れると、その部分はライトグレー(#D3D3D3)に置換されている。透過率50%の白だとライトグレーよりも白に近い色になる。

今簡単なペイントソフトっぽいのを作ってるんだけど、他の(ちゃんとした)ペイントソフトに画像を渡そうとすると一旦ファイルに保存する必要があるっぽい。少なくともPaint.Netに対してClipboard.SetImageで透過を含んだままで画像を渡すことはできない。
それとControlのPaintイベントでe.Graphicsに対して透過率100%を指定すると完全な黒になる。
ControlのPaintで処理すれば色々楽ができるかなと思ったけどそう簡単ではないらしい。

遊びで小さなプログラム作ってるばっかりでちゃんとしたプログラムは作ったことがないので、ちょっとしたことでも一々引っかかって作りたいものがなかなか作れない。

0 件のコメント:

コメントを投稿