我已创建此代码
Uri _blendImageUri = new Uri(@"Assets/1.png", UriKind.Relative);
var _blendImageProvider = new StreamImageSource((System.Windows.Application.GetResourceStream(_blendImageUri).Stream));
var bf = new BlendFilter(_blendImageProvider);
过滤效果不错。但我希望更改ForegroundSource属性的图像大小。如何以我的尺寸加载图像?
答案 0 :(得分:1)
如果我理解正确你,你试图将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的内容,使其仅在本地混合。请注意,重新构图时,您可以设置图像位置之外的边框(例如,新的矩形(-100,-100,500,500)),图像外部的区域将显示为黑色透明区域 - 正是您需要的区域BlendFilter。