nokia Imaging SDK настройка 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. Как я могу загрузить изображение с моим размером?


person Std_Net    schedule 03.02.2014    source источник
comment
мой размер Я имею в виду, что мое изображение 1.png имеет размер 256x256, и когда я добавляю это изображение в фильтр, это изображение помещается во все изображения, но я хочу изменить размер в моем 1.png и установить положение в каком-то месте (простой пример: у меня есть откройте мою фотографию и добавьте к этой фотографии фотографию моей жены, поэтому я должен установить положение и размер для 1.png) BlenderFilter имеет свойство ForegroundSource Я думаю, что могу изменить размер в этом свойстве...   -  person Std_Net    schedule 03.02.2014


Ответы (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.

person David Božjak    schedule 04.02.2014