有些時候,我們希望能夠儲存某個頁面或者某個XMAL控制項當時畫面結果,到本機上的圖片檔案中,我們就可以使用底下的程式碼來做到這樣的需求。
首先,我們使用建立個RenderTargetBitmap物件,並且使用了 RenderAsync 方法,產生該 XAML 控制項 gd測試圖片 的影像來源輸入的緩衝區資料流。
接著我們使用了 FileSavePicker 讓使用者選擇要將該圖片檔案儲存到本機的哪個目錄下。
最後,我們就可以透過 BitmapEncoder 物件,SetPixelData 與 FlushAsync 方法,將該影像來源的緩衝區資料流,寫入到檔案內。
首先,我們使用建立個RenderTargetBitmap物件,並且使用了 RenderAsync 方法,產生該 XAML 控制項 gd測試圖片 的影像來源輸入的緩衝區資料流。
接著我們使用了 FileSavePicker 讓使用者選擇要將該圖片檔案儲存到本機的哪個目錄下。
最後,我們就可以透過 BitmapEncoder 物件,SetPixelData 與 FlushAsync 方法,將該影像來源的緩衝區資料流,寫入到檔案內。
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); await renderTargetBitmap.RenderAsync(gd測試圖片); // 1. Get the pixels IBuffer pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); var pixels = await renderTargetBitmap.GetPixelsAsync(); var filePicker = new FileSavePicker(); filePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; var textFileExtension = new[] { ".jpg" }; var dataFileExtension = new[] { ".png" }; filePicker.FileTypeChoices.Add("JPG", textFileExtension); filePicker.FileTypeChoices.Add("PNG", dataFileExtension); IAsyncOperation< storagefile > asyncOp = filePicker.PickSaveFileAsync(); StorageFile file = await asyncOp; if (file == null) { return; } using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); byte[] bytes = pixels.ToArray(); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)gd測試圖片.Width, (uint)gd測試圖片.Height, 96, 96, bytes); await encoder.FlushAsync(); }
沒有留言:
張貼留言