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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ospitare n8n su Azure App Service
Testare il failover sulle region in Azure Storage
Gestione delle scrollbar dinamiche in HTML e CSS
Utilizzare il Null conditional assignment di C# 14
Come automatizzare il download dei report di billing da GitHub Enterprise
Response streaming con Blazor e .NET 10
Modificare lo stile in una QuickGrid Blazor
Raggruppare risorse in .NET Aspire
Impostare il tipo di supporto dei campi Json in Entity Framework con Sql Server
Gestione ciclo di vita in .NET Aspire
Controllare la telemetria con .NET Aspire
Creare comandi nella dashboard .NET Aspire




