Concatenare gli effetti sulle immagini con le Composition API nella Universal Windows Platform

di Giancarlo Lelli, in Windows 10, Universal Windows Platform, WinRT,

Qualche settimana fa abbiamo visto come sia facile applicare un effetto Sepia ad una immagine tramite le Composition API della Universal Windows Platform. Tuttavia, pur essendo un layer abbastanza ricco, le Composition API risultano meno ricche di effetti rispetto alle Win2D API. Questo però non rappresenta un problema, poiché è possibile combinare due o più effetti per creare delle nuove maschere altrimenti irraggiungibili. Un esempio di chaining di due effetti è riportato in basso.

private void MainPageLoaded(object sender, RoutedEventArgs e)
{
    ContainerVisual containerEffectImage = CanvasDraw.GetVisual();
 
    var _compositor = containerEffectImage.Compositor;
    var _imageFactory = CompositionImageFactory.CreateCompositionImageFactory(_compositor);
 
    var sepiaVisual = _compositor.CreateSpriteVisual();
    sepiaVisual.Size = new Vector2(208, 208);
    containerEffectImage.Children.InsertAtTop(sepiaVisual);
 
    var normalVisual = _compositor.CreateSpriteVisual();
    normalVisual.Size = new Vector2(208, 208);
 
    var uri = new Uri("ms-appx:///Assets/Pics/mvp.png");
    CompositionSurfaceBrush surfaceBrush = _compositor.CreateSurfaceBrush();
    surfaceBrush.Surface = _imageFactory.CreateImageFromUri(uri).Surface;
 
    ArithmeticCompositeEffect m_effect = new ArithmeticCompositeEffect
    {
        Source1 = new SaturationEffect
        {
            Saturation = 0,
            Source = new CompositionEffectSourceParameter("source")
        },
        Source2 = new InvertEffect
        {
            Source = new CompositionEffectSourceParameter("source")
        }
    };
 
    var effectFactory = _compositor.CreateEffectFactory(m_effect);
    var effectBrush = effectFactory.CreateBrush();
    sepiaVisual.Brush = effectBrush;
 
    normalVisual.Brush = surfaceBrush;
    effectBrush.SetSourceParameter("source", surfaceBrush);
}

Come possiamo intuire, la magia risiede nella classe ArithmeticCompositeEffect, che presi in ingresso due sorgenti, li applica sequenzialmente alla nostra immagine. Ecco alcuni esempi al variare del parametro Saturation, rispettivamente: 0.5, 0 e 1.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi