【问题标题】:WPF equivalent to GDI+'s ColorMatrixWPF 相当于 GDI+ 的 ColorMatrix
【发布时间】:2011-02-23 23:52:25
【问题描述】:

我注意到 WPF 具有 System.Windows.Media(.Imaging) 命名空间,其中包含许多与 System.Drawing(.Imagine) 相同的功能,但我没有看到与 GDI+ 中的 ColorMatrix 等效的功能。我实际上看不到一般进行颜色转换的方法。一个存在吗?我很高兴使用 GDI+,但只是好奇。

【问题讨论】:

    标签: c# .net wpf gdi+ colormatrix


    【解决方案1】:

    WPF 允许您编写自定义像素着色器。它们比可以复制为像素着色器的 ColorMatrix 更通用,而且它们在 GPU 上执行。 Shazzam 附带了一些示例并简化了编写它们的过程。

    请注意:WPF 比图像编辑更适合创建用户界面,没有什么比 System.Windows.Media.Imaging 的成员像 WriteableBitmap 和 RenderTargetBitmap 更多的了。如果您追求位图图像编辑功能,gdi+ 和 Direct2D 可能更合适。

    【讨论】:

    • 关于您的 WPF 相关评论:这就是我的想法,我只是想确定一下,因为我对图像编辑完全陌生。这可能是一个愚蠢的问题,但是像素着色器使用 GDI+/ColorMatrix 执行得更快吗?
    • PixelShader 将在支持 PS 的 GPU 上运行得更快。否则它将以与 GDI+ 相当的软件模式运行。不测量很难分辨。
    • 它们在 GPU 上执行时应该明显更快。 RenderTargetBitmap 使用较慢的软件渲染,但您只会在保存结果时使用它,在更改着色器属性时会非常快。我不想阻止您使用 WPF,只是它的位图编辑功能有限。
    • 使用 HLSL 实际上看起来很有吸引力。我没有为 UI 使用 GDI 或 WPF,所以我只关心哪个提供了最佳的图像编辑机制。 GDI/ColorMatrix 似乎比 System.Windows.Media.Imaging 更好,但我对 WPF 的 PixelShader 很感兴趣。 Direct2D 是否也使用 HLSL?
    • 我没有使用过 Direct2D,最初我提到它是因为它允许将形状等直接绘制到图像上,而 WPF 是保留模式 API。快速浏览一下 msdn,它似乎没有提供像 ColorMatrix 这样的东西,你需要使用 direct3d 来使用 HLSL。您可能对aforgenet.com/framework 感兴趣
    【解决方案2】:

    【讨论】:

    • 这似乎提供了一定数量的转换(例如进行灰度),但不允许您根据我的判断进行任意位图转换。
    猜你喜欢
    • 2019-04-07
    • 2011-02-28
    • 2010-10-10
    • 2012-11-12
    • 1970-01-01
    • 2010-10-25
    • 2019-06-07
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多