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
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Eseguire attività con Azure Container Jobs
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Definire stili a livello di libreria in Angular
Utilizzare Tailwind CSS all'interno di React: primi componenti
Implementare il throttling in ASP.NET Core
Utilizzare i primary constructor di C# per inizializzare le proprietà
Gestire domini wildcard in Azure Container Apps
Creare gruppi di client per Event Grid MQTT
Le novità di Angular: i miglioramenti alla CLI
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Utilizzare le collection expression in C#
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs