PNGNの透過処理をしたい
PNG形式画像には透過処理というものがあります。
Windowsのアイコンで、余白を透過にすると背景であるデスクトップが透過したり、Openshotでも画像の透過処理が有効で重ねて表示させることが出来ます。
C#では、以下のように、RGBの色を指定してこの透過処理を入れることが出来ます。
出力形式はPNGで保存時にSystem.Drawing.Imaging.ImageFormat.Png
を指定します。
if (checkBoxTransparent.Checked) { int r = (int)numericUpDownTransRed.Value; int g = (int)numericUpDownTransGreen.Value; int b = (int)numericUpDownTransBlue.Value; //近似色または近接ドットの処理は不要か? canvas0.MakeTransparent(Color.FromArgb(r, g, b)); } canvas0.Save(FileName, System.Drawing.Imaging.ImageFormat.Png);
透過する色はRGBのほかにColor.White
のようにもできます。
canvas0.MakeTransparent(Color.White);
しかし、同じ画像の白背景なのに、r=255、g=255、b=255
としたときは透過するのに、Color.White
だと透過にならない事例がありました。
↓はOpenshotでこのように透過処理をした「テスト」という文字の画像を黄色と黒の画像に重ねたものです。
少し、文字の縁が白っぽく抜けているのが見えます。
これは、文字が画像としての縁がグラデーションのようになっているために起きてしまいます。
これで使ってみて実用上不具合があったら、対策できるかどうか考えることとします。