2017-01-03 146 views
0

我想使用Win2D對圖像的特定區域進行透明(擦除)。使用Win2D擦除蒙版圖像

爲此,我有一個遮罩,其中包含對於需要擦除的像素的透明顏色 (RRGGBBAA = xxxxxx00),對於應該保留的像素使用白色(RRGGBBAA = FFFFFFFF)。

理想情況下,我需要或者CanvasBlend.AndCanvasBlend.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; 
    } 

它與示出源圖像完全未修飾的出現時,彷彿掩蔽圖像的不透明度(阿爾法)被忽略。有什麼建議麼?

回答