1

私はこのコードを試しました:

private void CreateAnimatedGif(string FileName1 , string FileName2)
        {
            Bitmap file1 = new Bitmap(FileName1);
            Bitmap file2 = new Bitmap(FileName2);
            Bitmap bitmap = new Bitmap(file1.Width + file2.Width, Math.Max(file1.Height, file2.Height));
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.DrawImage(file1, 0, 0);
                g.DrawImage(file2, file1.Width, 0);
            }
            bitmap.Save(@"d:\test.gif", System.Drawing.Imaging.ImageFormat.Gif);
        }

一般的に、それは機能しています。しかし、結果は十分ではありません。

  1. コードが高さを同じサイズにしようとしているため、最初の画像の下部に黒いスペースがあります。

  2. 2番目の画像は最初の画像よりも大きくなっています。2番目の画像は右側にあります。したがって、左の画像を最初の画像にして、2番目の画像と同じサイズ/解像度にする必要があります。

このコードを修正するにはどうすればよいですか?

これは、2つを組み合わせた後の新しい画像結果の例です。そして、なぜそれが私が望んでいたように良くないのですか?

ここに画像の説明を入力してください

4

1 に答える 1

1

左側の画像のサイズを変更し、グラフィックプロパティを設定して、品質を向上させ、品質を失わないようにすることができます。

using (Graphics g = Graphics.FromImage(bitmap))
{       
     //high quality rendering and interpolation mode
     g.SmoothingMode = SmoothingMode.HighQuality; 
     g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic;

     //resize the left image
     g.DrawImage(file1, new Rectangle(0, 0, file1.Width, file2.Height));
     g.DrawImage(file2, file1.Width, 0);
}

結果は次のとおりです。

ここに画像の説明を入力してください

または、新しい高さに比例してサイズを変更する場合は、次を使用します。

//calculate the new width proportionally to the new height it will have
int newWidth =  file1.Width + file1.Width / (file2.Height / (file2.Height - file1.Height));
Bitmap bitmap = new Bitmap(newWidth + file2.Width, Math.Max(file1.Height, file2.Height));
using (Graphics g = Graphics.FromImage(bitmap))
{       
     //high quality rendering and interpolation mode
     g.SmoothingMode = SmoothingMode.HighQuality; 
     g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic;

     //resize the left image
     g.DrawImage( file1, new Rectangle( 0, 0, newWidth, file2.Height ) );
     g.DrawImage(file2, newWidth, 0);
}

実際、結果はより良いです:

ここに画像の説明を入力してください

于 2013-01-29T17:12:56.590 に答える