2010-03-04 76 views
15

我正在使用WPF编写的SEM图像处理应用程序。我有一个来自Canvas的图像显示控件,它使用DrawingVisuals(每个“图层”一个)显示图像&叠加层。它还实现了Zoom &泛用尺度&平移变换,应用在DrawingVisuals上。如何在WPF中伸展位图而不平滑像素

当我放大图像以查看单个像素时,它们显示得很平滑,显然使用双线性过滤来扩展位图(并不令人惊讶,因为WPF通过Direct3D呈现)。但是,对于我的用例,我宁愿将各个像素看作尖锐的盒子,就像在任何图像编辑器(如Photoshop)中一样。这就是为什么我的应用程序的用户放大图像 - >能够在像素级别上进行操作。

在WPF中是否有这样的选项(除了在显示它之前手动拉伸位图)?我无法找到任何东西。

在此先感谢, 兹比涅克Vrastil 捷克共和国

回答

16

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

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor); 

有窍门。

兹比涅克Vrastil

+0

酷!给我留下了很多麻烦。 – 2010-12-01 23:40:16

+11

你也可以从XAML中设置它:'' – 2011-12-27 10:49:26

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是诀窍。希望这可以帮助别人。