应用蒙版图像以使用 Win2D 擦除



我想使用 Win2D 使图像的特定区域透明(擦除)。

为此,我有一个包含透明颜色的面具(RRGGBBAA = xxxxxx00)表示需要擦除的像素,白色(RRGGBBAA = FFFFFFFFF)表示应保留的像素。

理想情况下,我需要 CanvasBlend.And 或 CanvasBlend.Mutiply,但 Win2D 都没有提供这两种功能。但是,有CanvasBlend.Min,正如我所期望的那样,它也应该完成这项工作。

这是代码:

  internal static CanvasBitmap applyMask(
        ICanvasResourceCreatorWithDpi creator,
        CanvasBitmap sourceBmp, CanvasBitmap maskBmp,
        CanvasBlend blendMode = CanvasBlend.Min) {
        var destSize = sourceBmp.Size;
        var crt = new CanvasRenderTarget(creator, destSize);
        var rect = new Rect(new Point(), destSize);
        using (var ds = crt.CreateDrawingSession()) {
             ds.Blend = CanvasBlend.SourceOver;
             ds.DrawImage(sourceBmp, rect);
             ds.Blend = blendMode;
             ds.DrawImage(maskBmp, rect);
        }
        return crt;
  }

它提出了完全未经修改的显示源图像,就好像蒙版图像不透明度(Alpha)被忽略一样。有什么建议吗?

看看最近添加的 AlphaMaskEffect: https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_AlphaMaskEffect.htm

最新更新