无聊在商城找了一款小游戏玩,看到一个截屏功能,就google了一下具体实现,还是比较简单的,主要是靠WriteableBitmap(提供一个可写入并可更新的 BitmapSource)类实现。看一下msdn的介绍
·使用 WriteableBitmap.WriteableBitmap 构造 WriteableBitmap。
·若要在 UI 中显示图像,请将 WriteableBitmap 用作图像处理控件(如 Image)的源,或用作 ImageBrush 的源图像。
·如果您希望多次呈现此位图,并为其他快照重新使用该实例,请使用 Render 方法。 需要在 Render 后调用 Invalidate,以便呈现新图像。
·可以通过将转换传递给构造函数,或通过传递标识转换或 null 取消任何转换保留 UIElement 上的任何现有 RenderTransform。
代码实现比较简单
WriteableBitmap wBitmap = new WriteableBitmap((int)this.ActualWidth,(int)this.ActualHeight); wBitmap.Render(LayoutRoot, new MatrixTransform());//UIElement参数用来指出要绘制的元素,Transform参数用来在绘制成位图前的变换 wBitmap.Invalidate();//强制它重绘其内容并正确显示 img.Source = wBitmap; //真机测试代码,写入到媒体库 //using (MemoryStream stream = new MemoryStream()) //{ // WriteableBitmap对象进行编码,设置宽和高写入到jpg流中 // wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); // stream.Seek(0, SeekOrigin.Begin); // new MediaLibrary().SavePicture("应用截图.jpg", stream); //MediaLibrary对象提供设备媒体库的访问(音乐,图片等)