0

Win2Dで画像の特定の領域を透明にしたい(消したい)。

その目的のために、消去する必要があるピクセルの透明色 (RRGGBBAA = xxxxxx00) と、残す必要があるピクセルの白色 (RRGGBBAA = FFFFFFFF) を含むマスクがあります。

理想的には、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;
  }

マスクされた画像の不透明度(アルファ)が無視されているかのように、ソース画像を完全に変更せずに表示します。助言がありますか?

4

1 に答える 1

1

最近追加された AlphaMaskEffect をご覧ください: https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_AlphaMaskEffect.htm

于 2017-01-04T21:39:18.033 に答える