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 回答