诺基亚成像SDK定制BlendFilter

时间:2014-02-03 15:41:22

标签: windows-phone-7 windows-phone-8 nokia-imaging-sdk lumia-imaging-sdk

我已创建此代码

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

1 个答案:

答案 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。