在图像上添加模糊效果

Add blur effect on image

我想在用户 tap.User 可以在图像上点击多次的药水上对图像进行模糊效果,当他点击他点击的图像药水时会变得模糊。

using (var blurfilters = new FilterEffect(source))
{
    var blur = new BlurFilter();

    blurfilters.Filters = new IFilter[] { blur };
    var target = new WriteableBitmap((int)img1.ActualWidth, (int)img1.ActualHeight);
    using (var renderer = new WriteableBitmapRenderer(blurfilters, target))
    {
        await renderer.RenderAsync();
        img1.Source = target;
    }
}

试试这个:

http://www.blendrocks.com/code-blend/2015/1/29/implementing-image-blur-in-a-windows-universal-app

这适用于我的通用应用程序。

有效代码为:

private void OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
{
    if (imageLoaded)
    {
        using (var session = args.DrawingSession)
        {
            session.Units = CanvasUnits.Pixels;

            double displayScaling = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0;

            double pixelWidth = sender.ActualWidth * displayScaling;

            var scalefactor = pixelWidth / image.Size.Width;

            scaleEffect.Source = this.image;
            scaleEffect.Scale = new Vector2()
            {
                X = (float)scalefactor,
                Y = (float)scalefactor
            };

            blurEffect.Source = scaleEffect;
            blurEffect.BlurAmount = Blur;

            session.DrawImage(blurEffect, 0.0f, 0.0f);
        }
    }
}

对于 Silverlight 应用,试试这个:

http://www.dotnetcurry.com/showarticle.aspx?ID=1033

如果你想要高斯模糊,另一个很好的例子是:

WP8: Is there an easy way to scale and blur an BitmapImage for windows phone app?

试试这个:

var blur = new BlurFilter(30);  

编辑:

要使用 WritableBitmapExtensions 执行 gaussian blur,请执行以下操作(由于某些原因,concolution 不会编辑 writableBitmap,因此您必须再次将其分配给同一个 writableBitmap 才能看到结果):

WriteableBitmap target = new WriteableBitmap((int)img1.ActualWidth, (int)img1.ActualHeight);
target = target.Convolute(WriteableBitmapExtensions.KernelGaussianBlur5x5);

target = target.Convolute(WriteableBitmapExtensions.KernelGaussianBlur3x3);