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 截图 获取屏幕显示界面保存图片
本文主要讲如何保存我们的屏幕显示的,保存为图片,也就是截图,截我们应用显示的. UWP有一个功能,可以截图,RenderTargetBitmap 我们首先写一个Grid,我们需要给他名字,我这里给他S ...
- win10 uwp 后台获取资源
本文告诉大家,从后台代码获取界面定义的资源. 如果一个资源是写在 App 的资源,那么如何使用代码去获得他? 简单的方法是使用下面的代码 Application.Current.Resources[& ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
- win10 uwp DataContext
本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- win10 uwp 读取保存WriteableBitmap 、BitmapImage
我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap.关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说.主要说的 ...
- win10 uwp ApplicationView
原文:win10 uwp ApplicationView 本文和大家介绍一个重要的类,他可以用来设置窗口,如设置启动大小,设置是否允许截图,是否进入全屏,所有和窗口有关的,都可以在他这里设置. 可以使 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
随机推荐
- 如何将指定文件或文件夹直接提交到svn指定目录?
如何将指定文件或文件夹直接提交到svn指定目录? 一般我们都是按以下步骤操作的: 1.先将那个目录checkout下来 2.将要添加的文件或者文件夹放到这个目录中 3.右击文件执行svn菜单中的add ...
- Luogu P4180 【模板】严格次小生成树[BJWC2010]
P4180 [模板]严格次小生成树[BJWC2010] 题意 题目描述 小\(C\)最近学了很多最小生成树的算法,\(Prim\)算法.\(Kurskal\)算法.消圈算法等等.正当小\(C\)洋洋得 ...
- 常用Linux Tips(不定期更新)
查看本机所有开放端口 lsof -i -P | grep -i listen 查看一段文本单词出现频率 awk '{b[length($0)]++;total_lines++;for(i=1;i< ...
- [转]C#操作Excel初探
近期一段时间正好在做winform导出Excel报表的问题,学习了一下C#操作Excel的一些方法(如:向Excel中插入图片:删除Excel指定sheet中的某行或某列,在Excel指定的单元格中画 ...
- token 与 基于JWT的Token认证
支持跨域访问,无状态认证 token特点 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输 无状态(也称:服务端可扩展行): ...
- 二分图匹配——poj1469
关于本题二分图的匹配关系始终是加单向边用左边去匹配右边,match表示的是右边的人匹配的对应的左边的点 /* 关于本题二分图的匹配 链接的关系始终是单向边 用左边去匹配右边,match表示的是右边的人 ...
- iOS之CAShapeLayer属性简介
1.CAShapeLayer需要和贝塞尔曲线一块使用! #import <QuartzCore/CALayer.h> NS_ASSUME_NONNULL_BEGIN CA_CLASS_AV ...
- python-爬免费ip并验证其可行性
前言 最近在重新温习python基础-正则,感觉正则很强大,不过有点枯燥,想着,就去应用正则,找点有趣的事玩玩 00xx01---代理IP 有好多免费的ip,不过一个一个保存太难了,也不可能,还是用我 ...
- mybtais分批insert
这里自己写了个对集合按一批的数量进行分批操作的分页bean,见PagenationUtil如下: package com.util; import java.util.List ; /** * @au ...
- Python学习day02 - 编程分类和Pycharm和Jupyter的安装
编程语言分类 编程语言是用来和计算机交互的,计算机只认识0和1 机器语言(低级语言) 直接和硬件交互 用0和1和计算机沟通 优点:执行效率最高 缺点:开发效率低 汇编语言直接和硬件交互 优点(相较于机 ...