如何在不平滑像素的情况下在WPF中拉伸位图

时间:2010-03-04 16:42:54

标签: wpf image bitmap pixels smooth

我正在研究用WPF编写的SEM图像处理应用程序。我有一个图像显示控件,源自Canvas,显示图像&使用DrawingVisuals叠加(每个“层”一个)。它还实现了Zoom& amp;潘使用规模& translate transform,应用于DrawingVisuals。

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

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

提前谢谢, Zbynek Vrastil 捷克共和国

2 个答案:

答案 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就是诀窍。希望这可以帮助其他人。