title author date CreateTime categories
win10 uwp 截图 获取屏幕显示界面保存图片
lindexi
2019-09-02 12:57:38 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

本文主要讲如何保存我们的屏幕显示的控件,保存为图片。这个也就是截图,截我们应用显示的,我们应用之外的不截图。

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,上面代码保存为 jpg ,但是一般保存为 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 参数大概可以使用我的代码,不过上面代码使用的 dpi 不是 96 可能在不同的用户保存的图片不同。不过因为他截图的图片 像素本来就不是和其他的用户相同,所以使用这个方式保存是可以的。

我们在Grid放一个Image,然后可以看到,我们的原图

我们把图片一部分不显示,截图下来看下不显示的是不是就不会在图片。也就是截图是不是只截显示的元素

       <Grid x:Name="Stamp" ><Image x:Name="image" Width="500"Margin="200,10,10,10"></Image></Grid>

可以看到图片有部分被裁掉

假如我们不显示Grid,使用的方法就是让 Grid 被另一个 Grid 挡住,这时对被挡住的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"就出错,我们不需要把他放在用户可视的,也就是放在最底层也是可以

水印

UWP图片水印简单,我们需要一个Image和一个水印,水印在图片Zindex比他大

我们在我们图片的同个Panel放一个TextBlock,然后TextBlock就是我们的水印。

            <Grid x:Name="Stamp"><Image x:Name="image" Width="500"Margin="300,10,10,10" /><TextBlock Text="blog.csdn.net/lindexi_gd"HorizontalAlignment="Center"VerticalAlignment="Center" /></Grid>

可以看到我们有了水印,虽然这样看起来一定都不觉得是好的。(我不想说很烂)

如果遇到了全黑的图,我们还没办法加水印,但是基本99%的图是可以的。(谁说的,代码是黑的,vs背景用黑的好多)

如果想要改颜色,每个颜色改为和图不同的,好难。

我想到渐变,这样每个颜色都有。LinearGradientBrush是渐变,我们需要每个字符都看到,我们把渐变改为从上到下。EndPoint="0,1" StartPoint="0,0"一个是开始的Point,一个是结束

                    <TextBlock.Foreground><LinearGradientBrush EndPoint="结束点X,结束点Y" StartPoint="开始点X,开始点Y"><GradientStop Color="颜色 默认offset=0"/><GradientStop Color="White" Offset="1 1就是100%"/></LinearGradientBrush></TextBlock.Foreground>

说到这,我们来总的说下,就是用一个滚动条把我们的一个Grid放进去,然后Grid里面存在一张图片和一个TextBlock,图片就是我们需要加水印的,TextBlock就是水印,水印颜色最好渐变,然后使用获取元素图片截图。保存截图就是我们的图片加水印,做法很简单。

如果对大图感觉水印太小,可以用ViewBox。如果觉得我们水印要在中间,或下方或其他,那么我们需要把Image的宽度不设置,然后Grid也不设置高度和宽度。

        <ScrollViewer Width="10" Height="10"VerticalScrollBarVisibility="Visible"HorizontalScrollBarVisibility="Visible"><Grid x:Name="Stamp"><Image x:Name="image" HorizontalAlignment="Left"VerticalAlignment="Top"Margin="10,10,10,10" /><TextBlock Text="blog.csdn.net/lindexi_gd"HorizontalAlignment="Center"VerticalAlignment="Center" ><TextBlock.Foreground><LinearGradientBrush EndPoint="0,1" StartPoint="0,0"><GradientStop Color="Black"/><GradientStop Color="White" Offset="1"/></LinearGradientBrush></TextBlock.Foreground></TextBlock></Grid></ScrollViewer>

参见:http://www.zmy123.cn/?p=1257

因为保存的图片比较大,我在找压缩图片的算法,找到了这个博客 用C#开发一个WinForm版的批量图片压缩工具 - CSDN博客 还有 GDI+ 如何将图片绘制成圆形的图片 - CSDN博客

2019-9-2-win10-uwp-截图-获取屏幕显示界面保存图片相关推荐

  1. win10 uwp 毛玻璃

    原文:win10 uwp 毛玻璃 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博 ...

  2. win10 uwp DataContext

    本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...

  3. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  4. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    Win10 UWP开发中的重复性静态UI绘制小技巧 1 原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态 ...

  5. win10 uwp 线程池

    win10 uwp 线程池 原文:win10 uwp 线程池 如果大家有开发 WPF 或以前的程序,大概知道线程池不是 UWP 创造的,实际上在很多技术都用到线程池. 为什么需要线程池,他是什么?如何 ...

  6. win10 uwp 让焦点在点击在页面空白处时回到textbox中

    原文:win10 uwp 让焦点在点击在页面空白处时回到textbox中 在网上 有一个大神问我这样的问题:在做UWP的项目,怎么能让焦点在点击在页面空白处时回到textbox中? 虽然我的小伙伴认为 ...

  7. win10 UWP Controls by function

    Windows的 XAML UI 框架提供了很多控件,支持用户界面开发库. 我现在做的一个中文版的,很多都是照着微软写,除了注释 我们先学微软做一个简单的frame,新建Page,里面放title和跳 ...

  8. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

  9. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  10. win10 UWP 剪贴板 Clipboard

    本文告诉大家如何使用剪贴板 Clipboard 读取剪贴板和放内容在剪贴板 在 win10 UWP 可以通过 Windows.ApplicationModel.DataTransfer.Clipboa ...

最新文章

  1. 更新暂停,计划十一后继续
  2. 看完这篇 HTTPS,和面试官扯皮就没问题了
  3. 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
  4. python发送文件到钉钉群_iOS python 自动化打包,并在钉钉群里发通知
  5. 使用vue-router设置每个页面的title
  6. Oracle中procedure和function创建举例
  7. java.util.prefs.Preferences
  8. Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
  9. 前端使用工具sublime text 3下载
  10. 计算机专业基础 -- 网络相关AJAX基础知识
  11. UE4中实现PBKDF2加密验证
  12. java开发面试项目经验
  13. NVivo for Mac中的编码难理解?这6个视频帮助你!
  14. 新出行超级产业链之交通工具变革(网址导航)
  15. 投资组合管理-风险分散与马科维茨均值方差模型
  16. java教学视频毕向东_集合3--毕向东java基础教程视频学习笔记
  17. 微软服务器模式表格多维,用挖掘功能实现多元回归分析
  18. 阿里云ECS服务器环境搭建(2) —— ubuntu 16.04 安装中文输入法(搜狗输入法)
  19. 江西省抚州市谷歌高清卫星地图下载
  20. 核心期刊《微生物学杂志》

热门文章

  1. js 负数转换正_如何使用JavaScript将负数转换为正数?
  2. 数据库基础知识【 1 】
  3. 遗传算法(Java模拟)
  4. Open the World 丨 COSCon'22志愿者招募正式启动
  5. Another version of Vue Devtools seems to be installed报错
  6. 和其正的复兴梦,藏在气泡水与凉茶的碰撞里?
  7. python入门基础知识(一)print
  8. 腾讯通RTX拓展功能
  9. 13天Java进阶笔记-day11-网络编程和NIO
  10. SQL中模糊查询 like使用