2

小さい画像(例:20x25)を大きい画像(例:150x170)にサイズ変更しています。私の問題は品質に関するものではなく、予想通り、多少のぼやけがあります。私の問題は、画像の右側と下部に明るい色の境界線が作成されていることです。これを削除する方法はありますか?

私のコードは次のとおりです。

using (Graphics g = Graphics.FromImage((Image)ResizedImage))
{
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.SmoothingMode = SmoothingMode.HighQuality;

    g.DrawImage(OrigImage, new Rectangle(0, 0, Width, Height),
     new Rectangle(0, 0, OrigCImage.Width, OrigImage.Height), GraphicsUnit.Pixel);
}

ありがとう!

4

2 に答える 2

4

次のステートメントをコードに追加します。

  g.PixelOffsetMode = PixelOffsetMode.Half;

これで、4つの面すべてで同じように「明るい」画像が得られます。それは私が想定するあなたの問題を本当に解決しません。しかし、それはかなり避けられないことです。補間器は、より適切な推測を行うために、ビットマップのエッジで使用可能なピクセルを使い果たすだけです。

PixelOffsetModeを元の設定のままにし、エッジ効果が表示されないように意図的に画像を大きくしすぎると、より良い結果が得られる場合があります。

これはよさそうだった:

protected override void OnPaint(PaintEventArgs e) {
  e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
  e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
  e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
  Image img = Properties.Resources.progress;
  int w = this.ClientSize.Width + this.ClientSize.Width / img.Width;
  int h = this.ClientSize.Height + this.ClientSize.Height / img.Height;
  Rectangle rc = new Rectangle(0, 0, w, h);
  e.Graphics.DrawImage(img, rc);
}
于 2010-03-06T10:30:50.917 に答える
1

たぶん追加してみてください

g.PixelOffsetMode = PixelOffsetMode.HighQuality;
于 2010-03-06T15:52:32.577 に答える