上一篇讲了怎么样把UWP的UIElement截图保存到文件,这一篇再介绍一下如果把UIElement截图复制到剪贴板。其实操作类似,只是保存文件需要FileSavePicker创建文件Stream, 而写入剪贴板我们需要创建MemoryStream,把数据转换后放在内存中,然后用DataPackage把图像数据复制到剪贴板。
直接看下面代码吧
//use RenderTargetBitmap to render UIElement to image byte data array
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(myUiElement);//any xmal element
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
var pixels = pixelBuffer.ToArray();
//Create MemoryStream to write image byte data to
var stream = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)renderTargetBitmap.PixelWidth,
(uint)renderTargetBitmap.PixelHeight,
DisplayInformation.GetForCurrentView().RawDpiX,
DisplayInformation.GetForCurrentView().RawDpiY,
pixels);
await encoder.FlushAsync();
//Set stream data into DataPackage object
DataPackage dataPackage = new DataPackage();
dataPackage.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));
//Set DataPackage object into Clipboard
Clipboard.SetContent(dataPackage);