0

我已经创建了这段代码

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 属性的图像大小。如何以我的尺寸加载图像?

4

1 回答 1

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 的内容,使其仅在本地混合。请注意,在重新构图时,您可以设置图像位置之外的边框(例如 new Rect(-100, -100, 500, 500)),图像之外的区域将显示为黑色透明区域 - 正是您需要的混合过滤器。

于 2014-02-04T07:36:44.133 回答