0

このコードを作成しました

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 プロパティの画像サイズを変更したいです。自分のサイズで画像を読み込むにはどうすればよいですか?

4

1 に答える 1

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))。画像の外側の領域は黒い透明な領域として表示されます。ブレンドフィルター。

于 2014-02-04T07:36:44.133 に答える