画像をコピーしています。(実際のコードは画像のサイズを変更していますが、これは質問とは関係ありません。) 私のコードは次のようになります。
Image src = ...
using (Image dest = new Bitmap(width, height))
{
Graphics graph = Graphics.FromImage(dest);
graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
graph.DrawImage(src, 0, 0, width, height);
dest.Save(filename, saveFormat);
}
src
これは、透明度のある画像 (GIF など) またはアルファ チャネル (PNG など) から読み込まれない限り、うまく機能するようです。
DrawImage()
透明度/アルファ チャンネルを新しい画像に転送し、ファイルを保存するときにそれらを保持するにはどうすればよいでしょうか?
ベストアンサー1
かなり不明瞭です。あなたが言わなかったことがたくさんあります。透明度の最大の問題は、それが見えないことです。いくつかの手順を省略し、新しいビットマップのピクセル形式を明示的に指定せず、まったく初期化せず、使用する出力形式を指定しませんでした。透明度をサポートしていないものもあります。それでは、非常に明確にするバージョンを作成しましょう。paint.net で次のように見える PNG 画像から:
このコードを使用する
using (var src = new Bitmap("c:/temp/trans.png"))
using (var bmp = new Bitmap(100, 100, PixelFormat.Format32bppPArgb))
using (var gr = Graphics.FromImage(bmp)) {
gr.Clear(Color.Blue);
gr.DrawImage(src, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("c:/temp/result.png", ImageFormat.Png);
}
この画像を生成します:
青い背景がはっきりと見えるので、透明性が機能していることがわかります。