Если я правильно вас понял, вы пытаетесь смешать 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