Save WPF image with Shader effects applied

2019-03-14 08:14发布

问题:

I have a WPF Image control with attached blur effect. Is there a way to save the image (with blur) without using RenderTargetBitmap?

Thank you.

UPDATE: I'm using now new custom effect which derives from System.Windows.Media.Effects.ShaderEffect. I would like to save my image with shader effect applied.

回答1:

the only way you can render the bitmap is using RenderTargetBitmap.

Have a look at this example:

BitmapSource bitmap=GetYourBitmap();
Rectangle r=new Rectangle();
r.Background=new ImageBrush(bitmap);
r.Effect=yourEffect;

Size sz=new Size(bitmap.PixelWidth, bitmap.PixelHeight);
r.Measure(sz);
r.Arrange(new Rect(sz);

var rtb=new RenderTargetBitmap();
rtb.Render(r);
return rtb;//here is your bitmap with effects applied

Hope this helps



回答2:

I know this is an old question ... but I thought I would point people to Jamie Rodriguez's post (http://blogs.msdn.com/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx) on this subject.

I had a situation where using RenderTargetBitmap was resulting in an empty image ... and Jamie's post was the answer for me.

Hope it helps someone else too.



回答3:

This is something I wanted also. According to this: http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80 RenderTargetBitmap does not use HW (GPU) to render, only software. What a pity.

KV



回答4:

Since the shader effect is by definition applied on the video card, the only way you can get a copy of it in main memory is to grab it from screen memory. So RenderTargetBitmap is your solution. Is there any particular reason you wanted to avoid it?



回答5:

Here you go: http://perspectivefx.codeplex.com/ and all work done by GPU



标签: wpf imaging