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
Utilizzare le collection expression in C#
Routing statico e PreRendering in una Blazor Web App
Creare alias per tipi generici e tuple in C#
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Generare file per il download da Blazor WebAssembly
Disabilitare automaticamente un workflow di GitHub (parte 2)
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Creare form tipizzati con Angular
Eseguire una query su SQL Azure tramite un workflow di GitHub
Effettuare il binding di date in Blazor
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
I più letti di oggi
- Vuoi incontrare Bill Gates? Viaggia con ASPItalia.com!
- Customizzare il pager del DataGrid
- Stabilire un collegamento VPN tra una Web App e una Virtual Network
- Documentare ASP.NET Web API con Swagger
- Usare i servizi REST di BING per ottenere informazioni sulla posizione dell'utente
- Visual Studio 2005 CTP May