如何使PictureBox使用最近邻重采样?

Jar*_*ike 24 .net c# gdi+ picturebox winforms

我正在使用StretchImage,因为该框可以使用分割器调整大小.看起来默认是某种平滑的双线性滤波,导致我的图像模糊并具有莫尔条纹.

JYe*_*ton 31

我也需要这个功能.我创建了一个继承PictureBox的类,覆盖OnPaint并添加一个属性以允许设置插值模式:

using System.Drawing.Drawing2D;
using System.Windows.Forms;

/// <summary>
/// Inherits from PictureBox; adds Interpolation Mode Setting
/// </summary>
public class PictureBoxWithInterpolationMode : PictureBox
{
    public InterpolationMode InterpolationMode { get; set; }

    protected override void OnPaint(PaintEventArgs paintEventArgs)
    {
        paintEventArgs.Graphics.InterpolationMode = InterpolationMode;
        base.OnPaint(paintEventArgs);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用清晰变焦时,您会看到图像在缩放时偏移了半个像素.要修复它,请设置`paintEventArgs.Graphics.PixelOffsetMode = PixelOffsetMode.Half;`此属性名称错误; 把它放到一半会使整个事物向上和向左移动一半(缩放)像素. (4认同)
  • 可爱的答案.我建议海报的代码更完整,即添加一个使用`System.Drawing.Drawing2D`或将完整的命名空间放在InterpolationMode声明前面. (3认同)

Joe*_*csy 5

我怀疑你将不得不通过Image类和DrawImage函数手动调整大小并响应PictureBox上的resize事件.