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
Utilizzare Azure AI Studio per testare i modelli AI
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Aggiornare a .NET 9 su Azure App Service
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Configurare lo startup di applicazioni server e client con .NET Aspire
Utilizzare DeepSeek R1 con Azure AI
Generare la software bill of material (SBOM) in GitHub
Migliorare la sicurezza dei prompt con Azure AI Studio
Utilizzare Hybrid Cache in .NET 9
I più letti di oggi
- Beta 1 di VS 2005 Enterprise Architect
- Point-in-time restore con gli Azure Storage Blob
- Focus dei tag input con HTML5
- Il nuovo tag nav in HTML5
- Evitare la modalità di risparmio energetico in una Windows Store app
- Real Code Day 4.0: costruire applicazioni reali - Firenze
- AI&ML Conference 2019 - Milano
- Mono 0.12: verso una nuova implementazione di ASP.NET