Эффект размытия на изображении: другой результат до и после сохранения

У меня есть ошибка в моем редакторе изображений с помощью инструмента размытия.

Когда я выбираю прямоугольник, чтобы установить эффект размытия, и когда я применяю, результат немного отличается, смотрите:

введите описание изображения здесь введите описание изображения здесь

Для создания "До" я делаю:

var blurredImage = ExtractImageToBlur(); // extract the selected area from image

BlurredImageRectangle.Fill = new ImageBrush(blurredImage);

var effect = new BlurEffect();
effect.KernelType = KernelType.Gaussian;
effect.RenderingBias = RenderingBias.Quality;
effect.Radius = m_blurValue;

BlurredImageRectangle.Effect = effect;

Чтобы создать "После", я делаю:

var blurredImage = ExtractImageToBlur(); // extract the selected area from image

Rectangle rectangleToRender = new Rectangle();

rectangleToRender.Fill = new ImageBrush(blurredImage);

var effect = new BlurEffect();
effect.KernelType = KernelType.Gaussian;
effect.RenderingBias = RenderingBias.Quality;
effect.Radius = m_blurValue;

rectangleToRender.Effect = effect;

Size size = new Size(croppedImg.PixelWidth, croppedImg.PixelHeight);
rectangleToRender.Measure(size);
rectangleToRender.Arrange(new Rect(size));

var render = new RenderTargetBitmap(croppedImg.PixelWidth, croppedImg.PixelHeight, 96, 96, PixelFormats.Pbgra32);
render.Render(rectangleToRender);

// Merge the source with the blurred section
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext context = drawingVisual.RenderOpen())
{
    int left = (int)(Canvas.GetLeft(BlurredImageRectangle) * WidthRatio);
    int top = (int)(Canvas.GetTop(BlurredImageRectangle) * HeightRatio);

    context.DrawImage(Source, new Rect(0, 0, Source.PixelWidth, Source.PixelHeight));
    context.DrawImage(render, new Rect(left, top, croppedImg.PixelWidth, croppedImg.PixelHeight));
}

var bitmap = new RenderTargetBitmap(Source.PixelWidth, Source.PixelHeight, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(drawingVisual);

И когда я играю с радиусом размытия, иногда это сильно отличается от обоих изображений.

Почему это не то же самое?

1 ответ

Решение

Нашел проблему.

Когда я рисовал прямоугольник на экране, я применил эффект размытия к пикселям на экране.

Когда я нажимаю "Сохранить", эффект размытия применяется к пикселю изображения на диске.

Огромная разница.

Другие вопросы по тегам