Per sfruttare la crescente capacità degli schermi, in Windows 8 la qualità delle immagini è aumentata notevolmente e in WinRT queste vengono gestite al meglio per migliorare colori e dettagli.
Di contro è aumentato l'uso della memoria e dei cicli di CPU necessari per la loro visualizzazione; sebbene l'hardware a disposizione abbia notevoli prestazioni non dobbiamo trascurare le configurazioni che usano processori ARM, leggermente più limitati.
Per questi e comunque per tutte le app è consigliato usare le proprietà DecodePixelWidth e DecodePixelHeight, dell'oggetto BitmapImage, per fare in modo che l'oggetto prodotto dalla decodificata dell'immagine sia corrispondente alle dimensioni visualizzate a video.
Per comprendere le differenze che comportano l'uso di queste proprietà analizziamo il risultato a video e l'occupazione di memoria per un'immagine campione.
Nel markup dello snippet '1' impostiamo la proprietà Source di Image con una immagine JPG di 4 MB circa, di 4288x2848 pixel di dimensioni (la classica JPG di uno scatto con una moderna fotocamera digitale) e andiamo a forzare la sua dimensione a video con la consueta proprietà Width.
<!--1--> <Image Width="400"> <Image.Source> <BitmapImage UriSource="Assets/DSC_1987.JPG" /> </Image.Source> </Image> <!--2--> <Image Width="400"> <Image.Source> <BitmapImage UriSource="Assets/DSC_1987.JPG" DecodePixelWidth="400" /> </Image.Source> </Image>
Nello snippet '2', invece, usiamo DecodePixelWidth con un valore analogo alla proprietà Width.
L'immagine seguente rappresenta il Task Manager in cui possiamo vedere il consumo di memoria relativo ai due snippet di cui sopra, la differenza è molto evidente.
Di seguito possiamo vedere il risultato a video:
Se andiamo ad ingrandire le immagini a confronto possiamo apprezzare la diversa gestione che WinRT attua sui pixel.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Usare una container image come runner di GitHub Actions
Recuperare l'ultima versione di una release di GitHub
Creare una libreria CSS universale: i bottoni
Utilizzare politiche di resiliency con Azure Container App
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Utilizzare Tailwind CSS all'interno di React: primi componenti
Sostituire la GitHub Action di login su private registry
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
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!