本文主要讲如何保存我们的屏幕显示的,保存为图片,也就是截图,截我们应用显示的。

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>

我们的Grid被一个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


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

win10 uwp 截图 获取屏幕显示界面保存图片的更多相关文章

  1. 2019-9-2-win10-uwp-截图-获取屏幕显示界面保存图片

    title author date CreateTime categories win10 uwp 截图 获取屏幕显示界面保存图片 lindexi 2019-09-02 12:57:38 +0800 ...

  2. win10 uwp 后台获取资源

    本文告诉大家,从后台代码获取界面定义的资源. 如果一个资源是写在 App 的资源,那么如何使用代码去获得他? 简单的方法是使用下面的代码 Application.Current.Resources[& ...

  3. win10 uwp 毛玻璃

    毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...

  4. win10 uwp DataContext

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

  5. win10 uwp 读取保存WriteableBitmap 、BitmapImage

    我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap.关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说.主要说的 ...

  6. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  7. Win10 UWP应用发布流程

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

  8. 【广告】win10 uwp 水印图床 含代码

    本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...

  9. win10 uwp 商业游戏

    本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...

随机推荐

  1. 【Beta】 第二次Daily Scrum Meeting

    一.本次会议为第二次meeting会议 二.时间:13:30AM-13:55AM 地点:禹州 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 对已完成的功能进行进一步测试,以便 ...

  2. 第07周-集合与GUI

    1. 本周作业简评与建议 本周8分以上的同学有32人(占1/4),其中9分以上的同学有13人(占1/10).大作业未完成的最高评分一般高于6分.被认定为抄袭的为-10分.请大家认真完成大作业,后面每周 ...

  3. 201521123044 《Java程序设计》第13周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 1.网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.ed ...

  4. 201521123035《Java程序设计》第十周实验总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  5. 201521123011 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 协议.IP.域名.端口: 常用应用层协议:http, ftp 域名(通过域名可以找到IP)用ping测试 ...

  6. 201521123110《Java程序设计》第11周学习总结

    1. 本周学习总结 2. 书面作业 1.互斥访问与同步访问 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)? 1.2 同步代码块与同步 ...

  7. 从java的开始,java概述,java配置环境变量

    一.java开发入门 java 概述   Java划分为三个技术平台:JavaSE(标准版,含Java基础类库),JavaEE(企业版,技术平台),JavaME(小型版,小型产品.嵌入式设备) Jav ...

  8. Android Studio不更新到最新版使用Kotlin

    第一步:安装Kotlin插件 打开Settings面板,找到Plugins选项,点击Browse repositories(浏览仓库),输入“Kotlin”查找,然后安装即可.安装完成之后需要重启An ...

  9. Activiti第三篇【连接、排他网关、指定任务处理人、组任务】

    连线 上面我们已将学过了流程变量了,可以在[任务服务.运行时服务.流程开始.完成某个任务时设置流程变量],而我们的连接就是流程变量的实际应用了-. 定义流程图 我们并不是所有的流程都是按一条的路径来走 ...

  10. Linux硬链接软连接

    转载原文出处:http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html 1.Linux链接概念 Linux链接分两种,一种被称为硬链接( ...