2019-9-2-win10-uwp-截图-获取屏幕显示界面保存图片
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-截图-获取屏幕显示界面保存图片相关推荐
- win10 uwp 毛玻璃
原文:win10 uwp 毛玻璃 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博 ...
- win10 uwp DataContext
本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发中的重复性静态UI绘制小技巧 1
Win10 UWP开发中的重复性静态UI绘制小技巧 1 原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态 ...
- win10 uwp 线程池
win10 uwp 线程池 原文:win10 uwp 线程池 如果大家有开发 WPF 或以前的程序,大概知道线程池不是 UWP 创造的,实际上在很多技术都用到线程池. 为什么需要线程池,他是什么?如何 ...
- win10 uwp 让焦点在点击在页面空白处时回到textbox中
原文:win10 uwp 让焦点在点击在页面空白处时回到textbox中 在网上 有一个大神问我这样的问题:在做UWP的项目,怎么能让焦点在点击在页面空白处时回到textbox中? 虽然我的小伙伴认为 ...
- win10 UWP Controls by function
Windows的 XAML UI 框架提供了很多控件,支持用户界面开发库. 我现在做的一个中文版的,很多都是照着微软写,除了注释 我们先学微软做一个简单的frame,新建Page,里面放title和跳 ...
- win10 uwp 使用 Microsoft.Graph 发送邮件
在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...
- Win10 UWP应用发布流程
简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...
- win10 UWP 剪贴板 Clipboard
本文告诉大家如何使用剪贴板 Clipboard 读取剪贴板和放内容在剪贴板 在 win10 UWP 可以通过 Windows.ApplicationModel.DataTransfer.Clipboa ...
最新文章
- 更新暂停,计划十一后继续
- 看完这篇 HTTPS,和面试官扯皮就没问题了
- 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
- python发送文件到钉钉群_iOS python 自动化打包,并在钉钉群里发通知
- 使用vue-router设置每个页面的title
- Oracle中procedure和function创建举例
- java.util.prefs.Preferences
- Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
- 前端使用工具sublime text 3下载
- 计算机专业基础 -- 网络相关AJAX基础知识
- UE4中实现PBKDF2加密验证
- java开发面试项目经验
- NVivo for Mac中的编码难理解?这6个视频帮助你!
- 新出行超级产业链之交通工具变革(网址导航)
- 投资组合管理-风险分散与马科维茨均值方差模型
- java教学视频毕向东_集合3--毕向东java基础教程视频学习笔记
- 微软服务器模式表格多维,用挖掘功能实现多元回归分析
- 阿里云ECS服务器环境搭建(2) —— ubuntu 16.04 安装中文输入法(搜狗输入法)
- 江西省抚州市谷歌高清卫星地图下载
- 核心期刊《微生物学杂志》