我在WPF中对图像应用模糊效果,如下所示:
<Image ClipToBounds="True">
<Image.Effect>
<BlurEffect Radius="100" KernelType="Gaussian" RenderingBias="Performance" />
</Image.Effect>
</Image>
正如你所看到的,半径很大,因为图像很大,我需要它是 * 真的 * 模糊。然而,对于一个大的半径,我得到了一个轻框周围的图像,如所附的图像。我该如何抑制这一点?
如果你想知道:无论RenderingBias
是什么,结果都是一样的。在质量模式下也会生成一个边框。
3条答案
按热度按时间ev7lccsx1#
所发生的是一个模糊和ClipToBounds的结果。因为你使用的是高斯模糊,边缘会自然地融入背景(白色)。
应用ClipToBounds基本上切断了它本来会混合到白色中的地方,因此您会得到一个白色帧。
除非你愿意剪辑图像甚至更多,不幸的是,这只是模糊的工作原理。
eimct9ow2#
在模糊之前,你可以用图像边界的像素填充图像。这样做可以确保边界周围模糊的像素会被相似颜色的像素模糊,白色的边界会消失。当然,模糊之后,把图像裁剪回原来的大小。
u5i3ibmn3#
我找到了一个解决这个问题的方法。我的目标是在控件的中心有一个小图像,背景用它自己的模糊版本填充来填补空白。
使用下面的XAML时,我遇到了同样的问题,图像的角变成了白色,如下所示:
我用一个网格替换了图像,并使用了一个视觉笔刷作为背景,这比图像更灵活一些。请注意,像这样设置视觉笔刷的视图框会去除白色褪色,但也会剪切图像的一部分,但在我的应用程序中,这是可以接受的: