【问题标题】:WPF pixelshader on writeable bitmap可写位图上的 WPF 像素着色器
【发布时间】:2009-09-05 04:30:58
【问题描述】:

在 WPF 中试验像素着色器时,我决定通过基于 MSDN 示例的可写位图将一些像素绘制到全屏图像上
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx

我在图像上使用了模糊着色器。 为了获得连续效果,我从着色器中取回图像并将其用作可写位图的输入。

        RenderTargetBitmap rtb = new RenderTargetBitmap((int)width, (int)height, 96, 96.0, PixelFormats.Pbgra32);
        rtb.Render(imgBackground);

        wb = new WriteableBitmap(rtb);
        imgBackground.Source = wb;

上面的代码真的很慢。 我需要一些东西让它更快,或者以某种方式将像素着色器应用到可写位图后台缓冲区而不是图像。

提前谢谢。 卡在这个问题上一段时间了..

【问题讨论】:

    标签: wpf shader


    【解决方案1】:

    RenderTargetBitmap.Render(...) 始终在 UI 线程上的软件中渲染,因此您的像素着色器甚至在软件中运行。

    我不确定您要达到什么“效果”,但也许您可以在 imgBackground 上设置模糊效果(即 imgBackground.Effect = new BlurEffect())

    【讨论】:

    • 耶利米,谢谢你的回复。我正在尝试使用着色器生成的图像作为新输入。所以在 C# 中设置效果并没有什么不同。我需要找到一种方法来设置可写位图的效果。
    • 不幸的是,WPF 不会让您有效地执行此操作(正如您所发现的那样)。即使是这样,将表面从 GPU 拉到系统内存也很慢(虽然没有 RTB 慢)。您可能必须在其他方式上发挥创意才能获得类似的效果。也许通过创建您自己的像素着色器,这可能是因为 WPF 像素着色器的限制(即不支持多通道)或自定义着色器不适合;)。另一种选择是编写自己的模糊算法,并在 WriteableBitmap 上自己完成所有模糊效果。
    • 感谢您清除此问题!我没有解决我的问题,但现在我知道我必须搜索哪个方向。谢谢
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多