私があなたを正しく理解していれば、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))。画像の外側の領域は黒い透明な領域として表示されます。ブレンドフィルター。