2017-01-03 11 views
0

Win2Dを使用してイメージの特定の領域を透明(消去)したいと考えています。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; 
    } 

それがマスクされた画像の不透明度(アルファ)は無視されるかのように、完全に修飾されていないソース画像を示す思い付く:ここ

コードです。助言がありますか?

答えて

0
+0

はい、アルファマスク効果が本当に必要とされるものですが、私のアプリは、Windows 8.1+をサポートしていながら、それは、Windowsの10周年記念でのみ動作します。現時点では、私はWriteableBitmapを使って手動で行います。それ以外のものは利用できないので、私はそれをasnwerとしてマークします。 – cyanide

関連する問題