Подтвердить что ты не робот

Размытие по Гауссу приводит к белой рамке вокруг изображения

Я применяю эффект размытия к изображению в WPF, например:

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

Как вы можете видеть, радиус большой, потому что изображение велико, и мне нужно, чтобы оно было действительно размытым. Тем не менее, для большого радиуса я получаю легкую рамку вокруг моего изображения, как показано на прилагаемом изображении. Как я могу подавить это?

В случае, если вам интересно: результат тот же, что и у RenderingBias. Граница также создается в режиме качества.

White border around image

4b9b3361

Ответ 1

Что происходит в результате размытия вместе с ClipToBounds. Поскольку вы используете размытие Gaussian, края будут естественным образом смешаться с фоном (белый).

Применение ClipToBounds в основном отключается там, где оно иначе было бы смешано с белым, поэтому вы получаете белый кадр.

Если вы не хотите клипать изображение еще больше, к сожалению, это просто то, как работают размытия.

Screenshot of cliptobounds

Ответ 2

Перед тем, как размыть, вы можете поместить изображение, используя пиксели с границы изображения. Поступая таким образом, вы можете убедиться, что размытые пиксели вокруг границы будут размыты, используя пиксели одинакового цвета, а беловатая граница исчезнет. Конечно, после размытия изображения изображение возвращается к исходному размеру.