Nell'SDK di WinRT di Windows 8.1 abbiamo a disposizione la classe RenderTargetBitmap che ci permette di trasformare un markup XAML in una immagine.
Poichè RenderTargetBitmap eredita da ImageSource, possiamo utilizzarlo per valorizzare la proprietà Source di un Image per renderizzare una bitmap di un complesso visual tree di oggetti definiti nel markup; l'elaborazione scatta richiamando il metodo RenderAsync che accetta come parametri lo UIElement da 'appiattire' e facoltativamente anche le dimensioni finali della bitmap.
var renderTargetBitmap = new RenderTargetBitmap(); await renderTargetBitmap.RenderAsync(myGrid, _width, _height); myImage.Source = renderTargetBitmap;
Con il metodo GetPixelsAsync, inoltre, possiamo recuperare l'array di byte corrispondente all'immagine per, ad esempio, salvarlo su file system con FileSavePicker.
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); var savePicker = new FileSavePicker(); savePicker.FileTypeChoices.Add(".png", new List<string> { ".png" }); var file = await savePicker.PickSaveFileAsync(); using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream); encoder.SetPixelData( BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, pixelBuffer.ToArray()); await encoder.FlushAsync(); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query verso tipi non mappati in Entity Framework Core
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Creare una libreria CSS universale: i bottoni
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Change tracking e composition in Entity Framework
Paginare i risultati con QuickGrid in Blazor
Applicare un filtro per recuperare alcune issue di GitHub
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Generare un hash con SHA-3 in .NET
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Gestione dell'annidamento delle regole dei layer in CSS
I più letti di oggi
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Accedere con ASP.NET ad un documento XML creato dall'oggetto recordset di ADO e ASP
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView
- Ricavare lo spazio occupato su disco dal nostro sito
- Realizzare siti sicuri con ASP.NET Web Pages