【问题标题】:Save WPF image with Shader effects applied保存应用了着色器效果的 WPF 图像
【发布时间】:2009-02-13 11:55:09
【问题描述】:

我有一个带有模糊效果的 WPF 图像控件。 有没有办法在不使用 RenderTargetBitmap 的情况下保存图像(模糊)?

谢谢。

更新:我现在使用派生自 System.Windows.Media.Effects.ShaderEffect 的新自定义效果。 我想保存应用了着色器效果的图像。

【问题讨论】:

    标签: wpf imaging


    【解决方案1】:

    渲染位图的唯一方法是使用 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
    

    希望对你有帮助

    【讨论】:

    • 值得指出的是,这将处理对 CPU 的影响,而不是对 GPU 的影响。
    • 对我不起作用。
    【解决方案2】:

    我知道这是一个老问题......但我想我会向人们指出 Jamie Rodriguez 关于这个主题的帖子 (http://blogs.msdn.com/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx)。

    我遇到过使用 RenderTargetBitmap 导致图像为空的情况……而 Jamie 的帖子就是我的答案。

    希望它也对其他人有所帮助。

    【讨论】:

      【解决方案3】:

      这也是我想要的。据此:http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80RenderTargetBitmap 不使用硬件(GPU)进行渲染,仅使用软件。太可惜了。

      千伏

      【讨论】:

        【解决方案4】:

        由于着色器效果根据定义应用于显卡,因此在主内存中获取它的唯一方法是从屏幕内存中获取它。所以 RenderTargetBitmap 是您的解决方案。您有什么特别的原因要避免它吗?

        【讨论】:

        • 您好 U62,感谢您的回复。我想纯粹为了性能而避免它。原因。谢谢。
        • 优雅,您对我的回答投了反对票,然后将赏金和接受的答案奖励给一周后告诉您完全相同的事情的人。我喜欢这样,用户真的做到了......
        【解决方案5】:

        给你:http://perspectivefx.codeplex.com/ 和 GPU 完成的所有工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-28
          • 1970-01-01
          • 2010-12-28
          • 2013-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多