wpf 高斯模糊导致图像周围出现白色框

gblwokeq  于 2023-02-13  发布在  其他
关注(0)|答案(3)|浏览(391)

我在WPF中对图像应用模糊效果,如下所示:

<Image ClipToBounds="True">
    <Image.Effect>
        <BlurEffect Radius="100" KernelType="Gaussian" RenderingBias="Performance" />
    </Image.Effect>
</Image>

正如你所看到的,半径很大,因为图像很大,我需要它是 * 真的 * 模糊。然而,对于一个大的半径,我得到了一个轻框周围的图像,如所附的图像。我该如何抑制这一点?
如果你想知道:无论RenderingBias是什么,结果都是一样的。在质量模式下也会生成一个边框。

ev7lccsx

ev7lccsx1#

所发生的是一个模糊和ClipToBounds的结果。因为你使用的是高斯模糊,边缘会自然地融入背景(白色)。
应用ClipToBounds基本上切断了它本来会混合到白色中的地方,因此您会得到一个白色帧。
除非你愿意剪辑图像甚至更多,不幸的是,这只是模糊的工作原理。

eimct9ow

eimct9ow2#

在模糊之前,你可以用图像边界的像素填充图像。这样做可以确保边界周围模糊的像素会被相似颜色的像素模糊,白色的边界会消失。当然,模糊之后,把图像裁剪回原来的大小。

u5i3ibmn

u5i3ibmn3#

我找到了一个解决这个问题的方法。我的目标是在控件的中心有一个小图像,背景用它自己的模糊版本填充来填补空白。
使用下面的XAML时,我遇到了同样的问题,图像的角变成了白色,如下所示:

<Image ClipToBounds="True" Source="{Binding VideoDecoder.LiveImage}" Stretch="Fill">
    <Image.Effect >
        <BlurEffect Radius="100" RenderingBias="Performance" />
    </Image.Effect>
</Image>

我用一个网格替换了图像,并使用了一个视觉笔刷作为背景,这比图像更灵活一些。请注意,像这样设置视觉笔刷的视图框会去除白色褪色,但也会剪切图像的一部分,但在我的应用程序中,这是可以接受的:

<Grid>
    <Grid.Background>
        <VisualBrush Viewbox="0.06,0.1,0.85,0.81">
            <VisualBrush.Visual>
                <Image Source="{Binding VideoDecoder.LiveImage}">
                    <Image.BitmapEffect>
                        <BlurBitmapEffect KernelType="Gaussian" RenderOptions.BitmapScalingMode="LowQuality" RenderOptions.EdgeMode="Unspecified"  Radius="100"/>
                    </Image.BitmapEffect>
                </Image>
            </VisualBrush.Visual>
        </VisualBrush>
    </Grid.Background>
</Grid>

相关问题