Abbiamo già discusso in passato di come la Universal Windows Platform fornisca la possibilità a tutti gli sviluppatori di creare applicazioni più accattivanti e funzionali, anche grazie all'introduzione di paradigmi come il Fluent Design Language (rivisitato proprio a Microsoft Build in questi giorni) che permette di sfruttare luce e colori per rendere le applicazioni più "vive".
Per quanto riguarda la gestione dei colori, in alcuni script precedenti abbiamo visto come possiamo recuperare, ad esempio, il colore predefinito, piuttosto che il tema (chiaro/scuro), in Windows, così da creare applicazioni dinamiche e costruite su misura per gli utenti che ne faranno uso. Un altro aspetto, ad esempio per le applicazioni che si occupano di scrittura del testo, piuttosto che di elaborazioni di immagini, riguarda il cambio del tema a seconda del colore prevalente all'interno di un'immagine caricata.
Per recuperare il colore prevalente, è necessario lavorare un po' con le trasformazioni della classe BitmapDecoder, come mostrato nell'esempio seguente:
private async Task<Color> GetDominantColorAsync(Uri imageUri) { // apertura dell'immagine var file = await StorageFile.GetFileFromApplicationUriAsync(imageUri); // caricamento dello stream using (var stream = await file.OpenAsync(FileAccessMode.Read)) { // creazione del decoder var decoder = await BitmapDecoder.CreateAsync(stream); // creazione di una trasformazione per recuperare un'immagine 1x1 var myTransform = new BitmapTransform { ScaledHeight = 1, ScaledWidth = 1 }; // ricalcolo dei pixel var pixels = await decoder.GetPixelDataAsync( BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, myTransform, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage); // recupero dei byte sull'immagine scalata var bytes = pixels.DetachPixelData(); // lettura del colore return Color.FromArgb(255, bytes[0], bytes[1], bytes[2]); } }
Come si può notare, infatti, una volta aperto il file viene trasformata l'immagine in ingresso per trattarla come se fosse un unico grande pixel, e da qui è sufficiente ricostruire il colore semplicemente recuperando le varie tonalità RGB a cui viene poi applicato un canale alpha (di trasparenza) al massimo, così da renderlo visibile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Assegnare un valore di default a un parametro di una lambda in C#
Eseguire una query su SQL Azure tramite un workflow di GitHub
Implementare il throttling in ASP.NET Core
Evitare la command injection in un workflow di GitHub
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Eseguire operazioni con timeout in React
Creare alias per tipi generici e tuple in C#
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Generare token per autenicarsi sulle API di GitHub
Utilizzare Model as a Service su Microsoft Azure
I più letti di oggi
- Sblocca le performance della tua applicazione con .NET 8
- Utilizzare WebAssembly con .NET, ovunque
- Gestire la cancellazione di una richiesta in streaming da Blazor
- L'evoluzione di Blazor in .NET 8
- gRPC con .NET
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Blazor: Security
- Utilizzare QuickGrid di Blazor con Entity Framework