XAML照片效果

时间:2013-12-22 17:19:31

标签: c# .net wpf xaml effects

因此需要对WPF和XAML说新手。 我有一个项目来制作一个程序,当你插入图片时,你必须添加一些效果。我真的不太了解WPF,所以我需要你的帮助。 我需要你们的一个效果,所以我可以举一个例子来制作其他的。

1 个答案:

答案 0 :(得分:1)

在内存或类似页面上创建图像:

<Image Source="sourceimage.png" Name="myImage">
    <Image.Effect>
        <BlurEffect />
    </Image.Effect>
</Image>

接下来,您将需要以下函数将视觉保存到位图中(有更简单/更简单的方法来执行此操作,但此函数可以更好地处理某些边缘情况):

    private static BitmapSource CaptureScreen(Visual target, double dpiX, double dpiY)
    {
        if (target == null)
        {
            return null;
        }
        Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width * dpiX / 96.0),
                                                        (int)(bounds.Height * dpiY / 96.0),
                                                        dpiX,
                                                        dpiY,
                                                        PixelFormats.Pbgra32);
        DrawingVisual dv = new DrawingVisual();
        using (DrawingContext ctx = dv.RenderOpen())
        {
            VisualBrush vb = new VisualBrush(target);
            ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
        }
        rtb.Render(dv);
        return rtb;
    }

最后使用类似PNG编码器的文件将其保存到文件中:

var bitmap = CaptureScreen(this.myImage, 96, 96);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var s = File.Create(@"filename.png"))
    encoder.Save(s);

请记住,如果您要保存已添加到屏幕窗口的图像,那么您必须在Loaded处理程序中执行所有这些操作,如果您尝试在所有之前执行此操作框架元素已初始化,然后您的图像将为空白。

现在我已经说过所有这些让我只是说我认为使用WPF来做这样的事情真的是个坏主意。 WPF着色器效果是众所周知的,它依赖的许多硬件驱动程序都是如此,并且使用合适的图像处理库会更好。