XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2014/06/30

在 Windows 8.1 底下使用 RenderTargetBitmap 來儲存 XAML Element 的圖片

有些時候,我們希望能夠儲存某個頁面或者某個XMAL控制項當時畫面結果,到本機上的圖片檔案中,我們就可以使用底下的程式碼來做到這樣的需求。

首先,我們使用建立個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();
            }

沒有留言:

張貼留言