因此需要对WPF和XAML说新手。 我有一个项目来制作一个程序,当你插入图片时,你必须添加一些效果。我真的不太了解WPF,所以我需要你的帮助。 我需要你们的一个效果,所以我可以举一个例子来制作其他的。
答案 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着色器效果是众所周知的,它依赖的许多硬件驱动程序都是如此,并且使用合适的图像处理库会更好。