標籤:des style class blog code http
將 XAML 樹呈現為位元影像:
適用於 Windows 8.1 的 Windows 運行時為 Windows.UI.Xaml.Media.Imaging 命名空間添加了一種新類型:RenderTargetBitmap。
此類型提供了兩個關鍵方法:
RenderTargetBitmap.RenderAsync,用於提取 XAML 視覺化樹狀結構 並為其建立位元影像表示。
注意 此操作採用非同步方式,將給定的 XAML 元素樹呈現為位元影像。 此方法與螢幕重新整理不同步,不能保證精確的幀計時,因此該位元影像可能在假定捕獲時刻前後的一瞬間進行呈現。
RenderTargetBitmap.GetPixelsAsync,用於以特定格式返回像素的位元組數組。
下例顯示如何呈現 XAML 元素樹。
var renderTargetBitmap = new RenderTargetBitmap();await renderTargetBitmap.RenderAsync(myElementTree);myImage.Source = renderTargetBitmap;
RenderTargetBitmap 繼承自 ImageSource,因此可以直接將其設定為 Image 對象的源,而無需調用 GetPixelsAsync 以擷取及顯示位元影像資料。
下例顯示如何將呈現的位元影像寫入檔案。
var bitmap = new RenderTargetBitmap(); await bitmap.RenderAsync(this.C1); IBuffer buffer = await bitmap.GetPixelsAsync(); var pixelStream = buffer.AsStream(); FileSavePicker savePicker = new FileSavePicker(); savePicker.SuggestedStartLocation = PickerLocationId.Desktop; savePicker.FileTypeChoices.Add("Bitmap", new List<string>() { ".png" }); savePicker.SuggestedFileName = "New Bitmap"; StorageFile savedItem = await savePicker.PickSaveFileAsync(); Guid encoderId = BitmapEncoder.PngEncoderId; IRandomAccessStream fileStream = await savedItem.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, fileStream); byte[] pixels = new byte[pixelStream.Length]; pixelStream.Read(pixels, 0, pixels.Length); //pixal format shouldconvert to rgba8 for (int i = 0; i < pixels.Length; i += 4) { byte temp = pixels[i]; pixels[i] = pixels[i + 2]; pixels[i + 2] = temp; } encoder.SetPixelData( BitmapPixelFormat.Rgba8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, // Horizontal DPI 96, // Vertical DPI pixels); await encoder.FlushAsync();
MetroApp儲存UIEment為圖片 http://www.cnblogs.com/manupstairs/p/3556642.html 的代碼 也差不多。其//pixal format shouldconvert to rgba8 下面的一段交換代碼不用會變色。