如果我理解正确,您是在尝试仅将 ForegroundSource 与原始图像的一部分混合?这被称为局部混合,因为 BlendFilter 本身目前不支持它。
但是,您可以使用 ReframingFilter 重新构建 ForegroundSource,然后将其混合。你的链看起来像这样:
using (var mainImage = new StreamImageSource(...))
using (var filterEffect = new FilterEffect(mainImage))
{
using (var secondaryImage = new StreamImageSource(...))
using (var secondaryFilterEffect = new FilterEffect(secondaryImage))
using (var reframing = new ReframingFilter(new Rect(0, 0, 500, 500), 0)) //reframe your image, thus "setting" the location and size of the content when blending
{
secondaryFilterEffect.Filters = new [] { reframing };
using (var blendFilter = new BlendFilter(secondaryFilterEffect)
using (var renderer = new JpegRenderer(filterEffect))
{
filterEffect.Filters = new [] { blendFilter };
await renderer.RenderAsync();
}
}
}
如您所见,您可以使用重构过滤器来定位 ForegroundSource 的内容,使其仅在本地混合。请注意,在重新构图时,您可以设置图像位置之外的边框(例如 new Rect(-100, -100, 500, 500)),图像之外的区域将显示为黑色透明区域 - 正是您需要的混合过滤器。