WPF图像,如何去除模糊?

18

我有一个enter image description here

我需要一个enter image description here

XAML:

<Image Height="500"
       MouseLeftButtonDown="image_MouseLeftButtonDown"
       MouseRightButtonDown="image_MouseRightButtonDown"
       Name="image"
       Stretch="Fill"
       Width="500" />`

C#:

  wbmap = new WriteableBitmap(50, 50, 500, 500, PixelFormats.Indexed8, palette);
  wbmap.WritePixels(new Int32Rect(0, 0, wbmap.PixelWidth, wbmap.PixelHeight), pixels, wbmap.PixelWidth * wbmap.Format.BitsPerPixel / 8, 0);
  image.Source = wbmap;

1
请提供更多细节!第一张图片中的模糊效果是如何实现的?是在XAML中生成的吗? - Jobi Joy
3个回答

30

如 tkerwin 所述,在你的 XAML 图像代码中将 BitmapScalingMode 更改为 NearestNeighbor

RenderOptions.BitmapScalingMode="NearestNeighbor"

1
我尝试使用上面的代码。它运行良好!但是我找不到MSDN中Image.RenderOptions的描述,页面http://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx上没有任何信息。文档在哪里可以找到?谢谢 - sergtk
2
@sergdev - RenderOptions 类可以在此处找到。 - SwDevMan81
1
我看到了那个页面,谢谢。我想澄清一下:Image和RenderOptions类之间的关系在哪里描述?我认为RenderOptions是Image的成员,但实际情况并非如此。我无法从MSDN上理解这一点。 - sergtk
1
@sergdev - 实际上没有关系,RenderOptions是一个静态类(独立的)。 - SwDevMan81
@sergdev 看起来 ".BitmapScalingMode" 是一个 DependencyProperty -- 因此它可以被分配给任何 DependencyObject。(你可以将其分配给各种不合理的东西,比如矩形。-- 对于不识别该属性的对象,它只会被忽略。) - BrainSlugs83
现在必须使用RenderOptions.SetBitmapScalingMode(this,BitmapScalingMode.NearestNeighbor)。 - Gamestarplayer41

19

或许您需要将位图缩放模式更改为最近邻居。

在您的图像标记中添加RenderOptions.BitmapScalingMode="NearestNeighbor"


6
我不明白为什么要认为这个答案的代码示例比被采纳的答案少。这有点混乱。 :-/ - BrainSlugs83

0

提高分辨率/比例而不进行抗锯齿处理。

问题在于WPF缩放图像时会“平均”像素,而不是进行更加方块化的缩放。

请参阅此帖子:

像MS Paint中一样调整位图大小


我有一个分辨率为50x50的图像,它在500x500的图像控件中。我想要没有反锯齿的图像。我该怎么做? - Eugene Gluhotorenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接