プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

C#でPNGの透過処理する

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でこのように透過処理をした「テスト」という文字の画像を黄色と黒の画像に重ねたものです。
f:id:s51517765:20210410222657p:plain
少し、文字の縁が白っぽく抜けているのが見えます。
これは、文字が画像としての縁がグラデーションのようになっているために起きてしまいます。
f:id:s51517765:20210410223828p:plain
これで使ってみて実用上不具合があったら、対策できるかどうか考えることとします。

github.com