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
Azure SQL Database per dev: tutte le novità da non perdere
Keynote .NET Conference Italia 2025
Abilitare il rolling update su Azure Functions flex consumption
Disabilitare la telemetria nella CLI di GitHub
Impostare automaticamente l'altezza del font tramite CSS
Creare un extension method per applicare condizionalmente una Where in una query LINQ per Entity Framework
Utilizzo del persistent state di Blazor nel prerendering
Interagire con Azure DevOps tramite MCP Server
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Gestione opzioni colonna nella Blazor QuickGrid
Referenziare un package NuGet in una file based app .NET
Abilitare .NET 10 su Azure App Service e Azure Functions


