使用C#Graphics Class调整图像大小时的质量问题

时间:2010-03-06 10:08:48

标签: c# image-processing image-resizing

我正在将小图像(例如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);
}

谢谢!

2 个答案:

答案 0 :(得分:3)

将此语句添加到您的代码中:

  g.PixelOffsetMode = PixelOffsetMode.Half;

现在,您将获得一个在所有四个方面同样“轻盈”的图像。这并没有真正解决我的假设问题。但这是相当不可避免的,内插器只是在位图边缘用完了可用的像素,以便做出更好的猜测。

将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);
}

答案 1 :(得分:1)

也许尝试添加

g.PixelOffsetMode = PixelOffsetMode.HighQuality;