21

画像をコピーしています。(私の実際のコードは画像のサイズを変更していますが、それは私の質問には関係ありません。)私のコードは次のようになります。

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()透明度/アルファチャンネルを新しい画像に転送し、ファイルを保存するときにそれらを保持するにはどうすればよいですか?

4

2 に答える 2

29

それはかなり不明確です、あなたが言っていないことがたくさんあります。透明性の最大の問題は、それが見えないことです。いくつかの手順をスキップし、新しいビットマップのピクセル形式を明示的に指定せず、まったく初期化せず、使用する出力形式を指定しませんでした。透明性をサポートしていないものもあります。それでは、それを明確にするバージョンを作成しましょう。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);
        }

この画像を生成します:

ここに画像の説明を入力

青い背景がはっきりと見えるので、透明度が機能します。

于 2012-05-19T00:28:04.227 に答える