本文主要讲如何保存我们的屏幕显示的,保存为图片,也就是截图,截我们应用显示的。
UWP有一个功能,可以截图,RenderTargetBitmap
我们首先写一个Grid,我们需要给他名字,我这里给他Stamp
然后我们可以使用RenderTargetBitmap
保存我们屏幕Grid显示的
var bitmap = new RenderTargetBitmap();
StorageFile file = await KnownFolders.PicturesLibrary.CreateFileAsync("1.jpg",
CreationCollisionOption.GenerateUniqueName);
await bitmap.RenderAsync(Stamp);
var buffer = await bitmap.GetPixelsAsync();
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encod = await BitmapEncoder.CreateAsync(
BitmapEncoder.JpegEncoderId, stream);
encod.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)bitmap.PixelWidth,
(uint)bitmap.PixelHeight,
DisplayInformation.GetForCurrentView().LogicalDpi,
DisplayInformation.GetForCurrentView().LogicalDpi,
buffer.ToArray()
);
await encod.FlushAsync();
}
await bitmap.RenderAsync(Stamp);
能把一个UIelement显示转为图片,不过这个图片我们需要用BitmapEncoder
才可以保存为我们的图片
BitmapEncoder
可以保存为bmp、jpg、gif、png
保存需要使用SetPixelData
BitmapPixelFormat pixelFormat, BitmapAlphaMode alphaMode, System.UInt32 width, System.UInt32 height, System.Double dpiX, System.Double dpiY, [Range(0, int.MaxValue)] System.Byte[] pixels
我们在Grid放一个Image,然后可以看到,我们的原图
我们把图片一部分不显示
<Grid x:Name="Stamp" >
<Image x:Name="image" Width="500"
Margin="200,10,10,10">
</Image>
</Grid>
可以看到我们有部分被裁掉
假如我们不显示Grid
<Grid Grid.Row="0" Background="White"></Grid>
没影响
那么我们要显示我们的图片显示全,我们可以
<ScrollViewer VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible">
<Grid x:Name="Stamp" >
<Image x:Name="image" Width="500"
Margin="300,10,10,10">
</Image>
</Grid>
</ScrollViewer>
我们可以在滚动条写大小为很小,但是Width="1"
就出错,我们不需要把他放在用户可视的,也就是放在最底层也是可以
参见:http://www.zmy123.cn/?p=1257
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。