从网上找的代码,把UWP的Xaml的UIElement截图保存到剪贴板中,但是发现颜色都反了。代码和截图如下。
具体原因是由于 BitmapPixelFormat.Rgba8引起的,换成 BitmapPixelFormat.Bgra8 之后就好了。
//RenderTargetBitmap to render UIElement to image byte data array
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(LeftPanel, wid, hei);
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
var pixels = pixelBuffer.ToArray();
//MemoryStream to save image data to
var stream = new InMemoryRandomAccessStream();
//BitmapEncoder to convert data and save to Stream
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Rgba8,//这里是重点
BitmapAlphaMode.Straight,
(uint)wid,
(uint)hei,
DisplayInformation.GetForCurrentView().RawDpiX,
DisplayInformation.GetForCurrentView().RawDpiY,
pixels);
await encoder.FlushAsync();
//Save Image data into ClipBoard
DataPackage dataPackage = new DataPackage();
dataPackage.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));
//Copy image to Clipboard
Clipboard.SetContent(dataPackage);
UWP Application的颜色
保存到剪贴板的图片