SDK Nokia Imaging настроить BlendFilter

Я создал этот код

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 ответ

Если я вас правильно понял, вы пытаетесь смешать 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 так, чтобы оно смешивалось только локально. Обратите внимание, что при переопределении вы можете установить границы за пределами местоположения изображения (например, новый Rect(-100, -100, 500, 500)), и области вне изображения будут отображаться как черные прозрачные области - именно то, что вам нужно в BlendFilter.

Другие вопросы по тегам