使用 Win2D 应用蒙版图像进行擦除
Applying mask image for erasing with 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) 被忽略了一样。有什么建议么?
我想使用 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) 被忽略了一样。有什么建议么?