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
Migrare una service connection a workload identity federation in Azure DevOps
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Utilizzare Copilot con Azure Cosmos DB
Creazione di componenti personalizzati in React.js con Tailwind CSS
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Eseguire script pre e post esecuzione di un workflow di GitHub
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare i primary constructor di C# per inizializzare le proprietà
Utilizzare Tailwind CSS all'interno di React: primi componenti
Ottenere un token di accesso per una GitHub App
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Sfruttare MQTT in cloud e in edge con Azure Event Grid
I più letti di oggi
- ora è la volta di #azure. http://aspitalia.com/build-win8 #BldWin
- Implementare il pattern Dispose del .NET Framework
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare la cancellazione logica in #azure Container Registry https://aspit.co/ccy di @CristianCivera
- Centrare elementi in HTML tramite CSS
- Annunciato #PowerBI Embedded e disponibile in preview a partire da oggi! https://aspit.co/build2016 #build2016
- con il code inspector si potrà vedere il codice server associato all'HTML prodotto, ... http://aspitalia.com/build-win8 #BldWin
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!