2017-01-03 3 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; 
    } 

Он придумывает показывает исходное изображение полностью неизмененной, как будто замаскированным изображение Непрозрачность (Alpha) игнорируется. Какие-либо предложения?

ответ

0

Посмотрите на недавно добавленным AlphaMaskEffect: https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_AlphaMaskEffect.htm

+0

Да, альфа-маска эффект, что действительно необходимо, но он работает только с ОС Windows 10 годовщину которой, в то время как мое приложение поддерживает ОС Windows 8.1+. В настоящий момент я делаю это вручную через WriteableBitmap. Я отмечаю его как asnwer, учитывая, что больше ничего не доступно. – cyanide