我正在研究用WPF编写的SEM图像处理应用程序。我有一个图像显示控件,源自Canvas,显示图像&使用DrawingVisuals叠加(每个“层”一个)。它还实现了Zoom& amp;潘使用规模& translate transform,应用于DrawingVisuals。
当我放大图像以查看单个像素时,它们显示为平滑,显然使用双线性过滤来拉伸位图(毫不奇怪,因为WPF通过Direct3D渲染)。但是,对于我的用例,我宁愿将单个像素视为锐利的盒子,就像在任何像Photoshop这样的图像编辑器中一样。这就是为什么我的应用程序的用户放大图像的原因 - >能够在像素级别上操作。
WPF中是否有这样的选项(除了在显示位图之前手动拉伸位图)?我找不到任何东西。
提前谢谢, Zbynek Vrastil 捷克共和国答案 0 :(得分:18)
最后在专家交流的帮助下找到答案。类RenderOptions定义附加属性BitmapScalingMode,可以设置为NearestNeighbor。所以,
RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor);
诀窍。
Zbynek Vrastil
答案 1 :(得分:0)
讨厌对事物施加阻碍,但如果NearestNeighbor
像GDI +那样起作用,那么这将给你一个有限的成功。当您在高对比度区域增加放大倍率时,可能无法获得所需的结果。在GDI +中,你会发现黑色变成蓝色,白色变成红色 - 我再次强调对比度高的区域!如果在WPF中不是这种情况,请认为自己很幸运!
也许WCF开发人员可以确认一下?
我发现有更多的选择需要考虑,但我只能代表GDI + Graphics
类,这可能对某些人有用。
Graphics graph = e.Graphics;
graph.InterpolationMode = InterpolationMode.NearestNeighbor;
graph.CompositingQuality = CompositingQuality.AssumeLinear;
graph.SmoothingMode = SmoothingMode.None;
这对我有用。我认为SmoothingMode
就是诀窍。希望这可以帮助其他人。