Negli script precedenti abbiamo visto come grazie alle Composition API sia facile creare delle animazioni ad alte performance con pochissime righe di codice.
Questa settimana andremo a vedere come sia altrettanto semplice applicare effetti "speciali" alle immagini.
Consideriamo il seguente snippet di codice associato all'evento Loaded della nostra MainPage. Il codice sottostante fa riferimento ad un controllo Canvas al centro della nostra UI di nome CanvasDraw:
private void MainPageLoaded(object sender, RoutedEventArgs e)
{
ContainerVisual _leftRoot = CanvasDraw.GetVisual();
var _compositor = _leftRoot.Compositor;
var _imageFactory = CompositionImageFactory.CreateCompositionImageFactory(_compositor);
var sepiaVisual = _compositor.CreateSpriteVisual();
sepiaVisual.Size = new Vector2(208, 208);
_leftRoot.Children.InsertAtTop(sepiaVisual);
CompositionSurfaceBrush surfaceBrush = _compositor.CreateSurfaceBrush();
surfaceBrush.Surface = _imageFactory.CreateImageFromUri(new Uri("ms-appx:///Assets/Pics/mvp.png")).Surface;
var graphicsEffect = new SepiaEffect
{
Name = "sepiaEffect",
Source = new CompositionEffectSourceParameter("source")
};
var effectFactory = _compositor.CreateEffectFactory(graphicsEffect);
var effectBrush = effectFactory.CreateBrush();
sepiaVisual.Brush = effectBrush;
effectBrush.SetSourceParameter("source", surfaceBrush);
}
Per prima cosa otteniamo una riferimento al ContainerVisual del nostro Canvas e tramite esso al suo relativo Compositor. Successivamente, usiamo la classe CompositionImageFactory per creare il loader dell'immagine che useremo come esempio.
La classe CompositionImageFactory è disponibile tramite il Windows.UI.Composition.Toolkit attualmente disponibile solo su GitHub.
Essendo il codice di creazione del Visual e del caricamento dell'immagine abbastanza auto esplicativo, passiamo direttamente alla parte dove istanziamo l'oggetto di tipo SepiaEffect.
Questo oggetto rappresenta l'effetto che verrà applicato alla nostra immagine. Dopo averlo compilato e averne creato un Brush che associamo al nostro Visual non ci rimane che settare la sorgente del nostro effect brush tramite il metodo SetSourceParameter.
Il risultato di questo codice è mostrato nell'immagine sottostante (che riporta anche la versione originale dell'immagine)

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Importare un servizio esterno in .NET Aspire
Proteggere l'endpoint dell'agente A2A delle Logic App
Utilizzare Hybrid Cache in .NET 9
Gestire il routing HTTP in Azure Container App
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Creare comandi nella dashboard .NET Aspire
Generare una User Delegation SAS in .NET per Azure Blob Storage
Integrare LLM alle nostre applicazioni in .NET con MCP
Personalizzare le pagine di errore su Azure App Service
Ospitare n8n su Azure App Service
Gestione ciclo di vita in .NET Aspire
Montare Azure Blob Storage su Linux con BlobFuse2
I più letti di oggi
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Sfruttare una CDN con i bundle di ASP.NET
- Inserire le news di Punto Informatico nel proprio sito
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps


