【问题标题】:How can I stretch bitmap in WPF without smoothing pixels如何在 WPF 中拉伸位图而不平滑像素
【发布时间】:2011-01-23 18:32:49
【问题描述】:

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

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

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

提前致谢, 兹比涅克·弗拉斯蒂尔 捷克共和国

【问题讨论】:

    标签: wpf image bitmap pixels smooth


    【解决方案1】:

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

    RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor);
    

    成功了。

    Zbynek Vrastil

    【讨论】:

    • 酷!为我省去了很多麻烦。
    • 你也可以从 XAML 中设置它:<Image RenderOptions.BitmapScalingMode="NearestNeighbor" />
    【解决方案2】:

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

    也许 WCF 开发人员可以确认这一点?

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多