有些時候,我們希望能夠儲存某個頁面或者某個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();
}
沒有留言:
張貼留言