【发布时间】:2009-02-13 11:55:09
【问题描述】:
我有一个带有模糊效果的 WPF 图像控件。 有没有办法在不使用 RenderTargetBitmap 的情况下保存图像(模糊)?
谢谢。
更新:我现在使用派生自 System.Windows.Media.Effects.ShaderEffect 的新自定义效果。 我想保存应用了着色器效果的图像。
【问题讨论】:
我有一个带有模糊效果的 WPF 图像控件。 有没有办法在不使用 RenderTargetBitmap 的情况下保存图像(模糊)?
谢谢。
更新:我现在使用派生自 System.Windows.Media.Effects.ShaderEffect 的新自定义效果。 我想保存应用了着色器效果的图像。
【问题讨论】:
渲染位图的唯一方法是使用 RenderTargetBitmap。
看看这个例子:
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
希望对你有帮助
【讨论】:
我知道这是一个老问题......但我想我会向人们指出 Jamie Rodriguez 关于这个主题的帖子 (http://blogs.msdn.com/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx)。
我遇到过使用 RenderTargetBitmap 导致图像为空的情况……而 Jamie 的帖子就是我的答案。
希望它也对其他人有所帮助。
【讨论】:
这也是我想要的。据此:http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80RenderTargetBitmap 不使用硬件(GPU)进行渲染,仅使用软件。太可惜了。
千伏
【讨论】:
由于着色器效果根据定义应用于显卡,因此在主内存中获取它的唯一方法是从屏幕内存中获取它。所以 RenderTargetBitmap 是您的解决方案。您有什么特别的原因要避免它吗?
【讨论】:
给你:http://perspectivefx.codeplex.com/ 和 GPU 完成的所有工作
【讨论】: