【问题标题】:WinRT masking imageWinRT 掩码图像
【发布时间】:2013-03-29 22:45:04
【问题描述】:

我在 WinRT 中屏蔽图像时遇到问题。基本上,我需要做的是从基础图像中剪下一个拼图形状。我将拼图形状作为 PNG 黑白图像,其中形状本身是白色的,背景是黑色的,也是拼图的透明形状。这实际上是 iOS 应用程序的一个端口,他们使用带有黑白蒙版的 CGContextClipToMask 来剪切拼图。 我尝试使用 WriteableBitmapEx 中的 Blit 来掩盖图像,但我从未达到我想要的结果,我得到的最接近的是正确切割的形状,但背景是黑色的,而不是什么都没有。切出这个形状的正确方法是什么?谢谢大家的回答!

【问题讨论】:

    标签: c# .net graphics windows-runtime


    【解决方案1】:

    确实,Windows 8 中的 WinRT/XAML 没有其他 XAML 框架的 OpacityMask 实现。您可以使用WriteableBitmap 来操作像素,但它有点慢,尤其是在 ARM 设备上。更快的解决方案是使用 Direct2D,它内置了 FillOpacityMask 方法。由于 SharpDX wraps it 非常适合 .NET,因此您也可以使用 C# 来做到这一点。

    【讨论】:

    • 谢谢!我实际上正在考虑 Direct2D,但我决定采用另一个答案中提出的解决方案 - 只需手动稍微更改掩码,然后 Blitting 它。因为我几乎没有使用 Direct2D 的经验,所以要花很长时间才能把它做好,不幸的是我需要快速完成它。但是,如果出现问题,那么唯一剩下的就是使用 Direct2D 方法。无论如何,谢谢你的建议!
    【解决方案2】:

    我没有代码,但最简单的情况是在 Photoshop/GIMP/任何在线透明度工具中打开 PNG 文件,然后将黑色像素 alpha 映射为零。

    另一个例子是直接在代码中执行此操作, WriteableBitmapEx 具有改变每个像素的功能, 您所要做的就是遍历所有黑色像素并将 alpha 更改为 0。

    【讨论】:

    • 是的,我可能只是更改图像,它似乎工作得很好,这是完成它的最快方法。
    猜你喜欢
    • 2020-04-13
    • 2022-01-25
    • 2010-09-21
    • 2016-03-19
    • 2018-07-21
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多