2

次の 2 つのコード サンプルは、スケーリングされたイメージを生成するという点で同等です。とはいえ、2 番目の方が高品質のスケーリングされた画像を生成しますか? .NET 4.5 を使用しています。

// The short.
using(Bitmap large = new Bitmap(input, width, height))
{
    // Do whatever.
}


// The long.
using(Bitmap large = new Bitmap(width, height))
{
    using(Graphics g = Graphics.FromImage(large))
    {
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawImage(input, 0, 0, width, height);
    }
    // Do whatever.
}
4

2 に答える 2

2

2つの違いは、前のものがデフォルトを使用することです。

CompositingQuality: Default
SmoothingMode:      None
InterpolationMode:  Bilinear
PixelOffsetMode:    Default

ですから、そうです、後者は間違いなく画質を向上させるはずです。

簡略化すると、ビットマップコンストラクターの関連コードは(例外処理が削除されて)次のようになります。

Graphics graphics = Graphics.FromImage((Image) this);
graphics.Clear(Color.Transparent);
graphics.DrawImage(original, 0, 0, width, height);

...品質を調整していることを除けば、これはほとんどあなたが持っているものです。

于 2012-10-08T15:58:17.783 に答える
0

両者の間にはわずかな品質の違いがあります。2番目の画像はわずかに鮮明な画像を提供します(少なくとも私のテスト画像では、違いを見るのは非常に困難です)。

どれが一番良いかは主観的で、何よりも画像の内容によると思います。

たとえば、コントラストの高いオプションを使用すると、葉のある木の写真を縮小するときにディテールが向上しますが、花嫁のベールにモアレ効果が発生する可能性があります(シャープであることが必ずしも良いとは限りません)。

于 2012-10-08T15:47:25.923 に答える