2012-01-31 2 views
3

Graphicsクラスを使用してビットマップのサイズを変更すると、元の画像のいくつかの右および下のピクセルが省略されています。ここでダウンスケーリング後の画像の境界がなくなった

は(オリジナル、60x60、30×30)の例である:

original result60 result30

私のコード:

foreach(int x in new[]{60, 30}) 
{ 
    var result = new Bitmap(x, x); 
    var g = Graphics.FromImage(result); 
    g.DrawImage(new Bitmap(MediaDir + "original.png"), 0, 0, x, x); 
    result.Save(MediaDir + "result" + x + ".png", ImageFormat.Png); 
} 

私は何かが足りないのですか?

enter image description here enter image description here enter image description here enter image description here

答えて

2

サイズ変更プロセス自体の効果である可能性が高い:

編集は、ここHighQualityBicubicを使用した結果です。使用されるアルゴリズムに応じて、境界のピクセルの赤色を、全体画像にはもはや白いものとして関連しないものとして検出することができるので、白色のオンが出力される。

+0

私は同意しますが、バグのような縫い目があります。あなたは思いませんか? –

+0

それは依存します - アルゴリズムの仕様が "ピクセルのために最も重要な色だけを使用する"と言うならば、それはバグではありません。平均的な色濃度を出力して出力しなければならないとすれば、私は同意します。 – ZombieSheep

+0

これはバグではありません。あなたがそれについて考えるなら、あなたがイメージを縮小するとき、あなたはデータを失うでしょう。 HighQualityBicubicなどのよりスマートな補間モードでは、データの損失は少なくなりますが、データは失われます。 3ピクセルごとに1つにマージされるようにイメージのサイズを変更すると、3つのうち2つが破棄されます。あなたの薄い赤い線が捨てられるようになる。それがより厚い(1ピクセル幅より大きい)場合、それはおそらく現れるでしょう。 –

3

補間モードをInterpolationMode.HighQualityBicubicに設定します。

Microsoft Tutorialにパラメータの影響を見ることができます。左下の例も同様の問題があります。

+0

実際、私は元のコードで既にInterpolationMode.Bicubicを使用しています。それは問題を解決しません。 –

+0

@TomEsterez、私はBicubicとHighQualityBicubicの違いは、この問題に直接対処することだと思います。 –

+0

HighQualityBicubicは問題を少し見えにくくしますが、依然として存在します。 –

0

私はこの回避策を "バグ"に使用しました。私はstandartのeshopアイテムの写真をリサイズすると、いくつかの灰色の左/上のボーダーといくつかのものがあります。したがって、このコードを使用してください。

g.DrawImage(src, -1, -1, width+1, height+1); 

とその作業は完全です。私はまた、ピクセルモードについていくつかのヒントを見つけるか、drawimageメソッドで特別なattrを使用しようとしますが、それは私にとってはうまくいきません。

関連する問題