当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使PictureBox使用最近邻重采样?》经验,为你挑选了2个好方法。

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



1> JYelton..:

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

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

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

    protected override void OnPaint(PaintEventArgs paintEventArgs)
    {
        paintEventArgs.Graphics.InterpolationMode = InterpolationMode;
        base.OnPaint(paintEventArgs);
    }
}


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

2> Joel Lucsy..:

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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有