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 il trigger SQL con le Azure Function
Paginare i risultati con QuickGrid in Blazor
Utilizzare Azure Cosmos DB con i vettori
Gestire gli accessi con Token su Azure Container Registry
Disabilitare automaticamente un workflow di GitHub (parte 2)
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Gestione dei nomi con le regole @layer in CSS
Introduzione alle Container Queries
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Usare lo spread operator con i collection initializer in C#
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online