20

我正在研究用 WPF 编写的 SEM 图像处理应用程序。我有一个从 Canvas 派生的图像显示控件,它使用 DrawingVisuals 显示图像和叠加层(每个“层”一个)。它还使用缩放和平移变换实现缩放和平移,应用于 DrawingVisuals。

当我放大图像以查看单个像素时,它们显示平滑,显然使用双线性过滤来拉伸位图(毫不奇怪,因为 WPF 是通过 Direct3D 呈现的)。但是,对于我的用例,我宁愿将单个像素视为清晰的框,就像在 Photoshop 等任何图像编辑器中一样。这就是为什么我的应用程序的用户会缩放图像 -> 以便能够在像素级别上进行操作。

WPF 中是否有这样的选项(除了在显示之前手动拉伸位图)?我什么也找不到。

在此先感谢 Zbynek Vrastil 捷克共和国

4

2 回答 2

22

终于在专家交流的帮助下找到了答案。RenderOptions 类定义了附加属性 BitmapScalingMode,可以设置为 NearestNeighbor。所以,

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor);

成功了。

兹比涅克·弗拉斯蒂尔

于 2010-03-05T08:58:24.697 回答
1

讨厌在事情上拖后腿,但如果NearestNeighbor像 GDI+ 这样工作,那么这会给你带来有限的成功。当您在高对比度区域增加放大倍率时,您可能无法获得所需的结果。在 GDI+ 中,你会发现黑色变成蓝色,白色变成红色——我再次强调高对比度区域!如果在 WPF 中不是这种情况,请认为自己很幸运!

也许 WCF 开发人员可以证实这一点?

我发现还有更多的选择需要考虑,但我只能代表 GDI+Graphics课程,这可能对某些人有用。

Graphics graph = e.Graphics;
graph.InterpolationMode = InterpolationMode.NearestNeighbor;
graph.CompositingQuality = CompositingQuality.AssumeLinear;
graph.SmoothingMode = SmoothingMode.None;

这对我有用。我认为这SmoothingMode是诀窍。希望这对其他人有帮助。

于 2012-03-16T11:07:42.400 回答