一种截图处理方法及装置

文档序号:1875109 发布日期:2021-11-23 浏览:12次 >En<

阅读说明:本技术 一种截图处理方法及装置 (Screenshot processing method and device ) 是由 李娜芬 李斌 梁百怡 于 2020-05-08 设计创作,主要内容包括:本发明提供了一种截图处理方法、装置、电子设备及计算机可读存储介质;方法包括:应用程序的第一进程创建用于截图的第二进程;第二进程获取目标显示器的扫描密度;其中,目标显示器为需要被截图的显示器;第二进程获取目标显示器的桌面图片,并根据目标显示器的扫描密度确定桌面图片的物理尺寸;第二进程创建符合物理尺寸的截图窗口,并在截图窗口中显示桌面图片;第二进程根据截图窗口中的桌面图片生成截图结果。通过本发明,能够实现精确截图。(The invention provides a screenshot processing method, a screenshot processing device, electronic equipment and a computer-readable storage medium; the method comprises the following steps: a first process of an application program creates a second process for screenshot; the second process obtains the scanning density of the target display; the target display is a display which needs to be subjected to screenshot; the second process acquires a desktop picture of the target display and determines the physical size of the desktop picture according to the scanning density of the target display; a second process creates a screenshot window conforming to the physical size and displays a desktop picture in the screenshot window; and the second process generates a screenshot result according to the desktop picture in the screenshot window. By the method and the device, accurate screenshot can be realized.)

一种截图处理方法及装置

技术领域

本发明涉及图像处理技术,尤其涉及一种截图处理方法、装置、电子设备及计算机可读存储介质。

背景技术

随着计算机设备的普及,越来越多的用户选择将多个显示器连接到笔记本电脑上进行工作或娱乐,如此,可以利用不同的显示器屏幕显示不同的工作内容,减少窗口切换次数,提高工作效率。但是,当连接的多个显示器的扫描密度不同时,此时若在非主显示器上进行截图操作,将会导致桌面图像整体过大或过小。由于用户无法获得期望的截图结果,影响截图的使用体验。

发明内容

本发明实施例提供一种截图处理方法、装置、电子设备及计算机可读存储介质,可实现精确截图。

本发明实施例的技术方案是这样实现的:

本发明实施例提供一种截图处理方法,包括:

应用程序的第一进程创建用于截图的第二进程;

所述第二进程获取目标显示器的扫描密度;其中,所述目标显示器为需要被截图的显示器;

所述第二进程获取所述目标显示器的桌面图片,并根据所述目标显示器的扫描密度确定所述桌面图片的物理尺寸;

所述第二进程创建符合所述物理尺寸的截图窗口,并在所述截图窗口中显示所述桌面图片;

所述第二进程根据所述截图窗口中的所述桌面图片生成截图结果。

本发明实施例提供一种截图处理装置,包括:

创建模块,用于应用程序的第一进程创建用于截图的第二进程;

获取模块,用于所述第二进程获取目标显示器的扫描密度;其中,所述目标显示器为需要被截图的显示器;

确定模块,用于所述第二进程获取所述目标显示器的桌面图片,并根据所述目标显示器的扫描密度确定所述桌面图片的物理尺寸;

显示模块,用于所述第二进程创建符合所述物理尺寸的截图窗口,并在所述截图窗口中显示所述桌面图片;

截图生成模块,用于所述第二进程根据所述截图窗口中的所述桌面图片生成截图结果。

上述方案中,所述创建模块,用于:

当所述应用程序的所述第一进程为所述应用程序的主进程,且当所述第一进程启动时,所述第一进程创建所述第二进程,或者,当所述第一进程接收到操作系统发送的截图指令时,所述第一进程创建所述第二进程;

所述第一进程将截图窗口的代码的路径参数发送给所述第二进程;

其中,所述路径参数用于使所述第二进程根据所述路径参数读取所述截图窗口的代码,并在获取到所述物理尺寸时创建符合所述物理尺寸的截图窗口。

所述获取模块,用于:

所述第二进程向操作系统声明所述第二进程的扫描密度感知模式为显示器级感知,以向所述操作系统查询所述目标显示器的扫描密度。

所述确定模块,用于:

所述第二进程调用操作系统的截图接口,以

从所述截图接口获取与所述目标显示器的标识以及截图时间匹配的桌面图片;

将所述桌面图片的像素宽度与所述目标显示器的扫描密度的比值,确定为所述桌面图片在所述目标显示器中的物理宽度,并

将所述桌面图片的像素高度与所述目标显示器的扫描密度的比值,确定为所述桌面图片在所述目标显示器中的物理高度。

所述显示模块,用于:

所述第二进程根据所述桌面图片在所述目标显示器中的物理宽度和物理高度,在所述目标显示器中创建符合所述物理宽度和所述物理高度的截图窗口。

所述显示模块,还用于:

当处于扩展模式时,所述目标显示器包括主显示器和副显示器;将所述主显示器的桌面图片显示在主显示器创建的部分截图窗口中,将所述副显示器的桌面图片显示在副显示器创建的部分截图窗口中。

所述截图生成模块,用于:

所述第一进程获取截图的效果数据,将所述效果数据序列化为字节序列,并

将所述字节序列发送给所述第二进程;

所述第二进程反序列化所述字节序列,得到所述效果数据;

根据所述效果数据在所述截图窗口的工具栏中显示能够添加的特效;

响应于基于所述特效对所述桌面图片的特效编辑操作,将所述桌面图片与根据所述特效编辑操作生成的特效数据融合,得到截图结果。

所述截图生成模块,还用于:

所述第二进程响应于截图区域选取操作,获取截图区域的位置参数;

在所述截图窗口中,根据所述截图区域的位置参数显示所述截图区域的位置。

所述截图生成模块,还用于:

根据所述截图区域的位置参数,对所述桌面图片进行抠图处理;

将抠图处理后得到的所述截图区域的图片,与根据所述特效编辑操作生成的特效数据融合。

所述截图生成模块,还用于:

所述第二进程将所述截图结果发送到操作系统的数据共享位置中,并通知所述第一进程截图完成,以使

所述第一进程结束所述第二进程。

本发明实施例还提供一种电子设备,包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的截图处理方法。

本发明实施例还提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的截图处理方法。

本发明实施例具有以下有益效果:

由第一进程创建第二进程进行截图处理,由于将截图处理从第一进程解耦,可以减轻第一进程的工作量,保证第一进程的稳定运行;第二进程中根据目标显示器的扫描密度创建截图窗口,能够使截图窗口的物理尺寸与目标显示器适配,进而保证基于截图窗口生成的截图结果的精确性。

附图说明

图1A是相关技术在副显示器的扫描密度小于主显示器的扫描密度的情况下对扩展屏幕截图的示意图;

图1B是相关技术在副显示器的扫描密度小于主显示器的扫描密度的情况下对副显示器截图的示意图;

图1C是相关技术在副显示器的扫描密度大于主显示器的扫描密度的情况下对副显示器截图的示意图;

图2是本发明实施例提供的电子设备的一个结构示意图;

图3A是本发明实施例提供的截图处理方法的一个流程示意图;

图3B是本发明实施例提供的截图处理方法的一个流程示意图;

图4A是本发明实施例提供的截图窗口的示意图;

图4B是本发明实施例提供的截图窗口的示意图;

图5是本发明实施例提供的截图处理方法的一个流程示意图;

图6是本发明实施例提供的截图的一个流程示意图;

图7是本发明实施例提供的在应用程序的会话窗口截图的示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。

对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

1)扫描密度,单位是每英寸点数(DPI,Dot per inch),本发明实施例中用于表示显示器屏幕的一英寸长度中点的数量,每个点用于显示一个像素点。例如,96DPI表示显示器的一英寸长度上包括96个点,120DPI表示显示器的一英寸长度上包括120个点。DPI可以用于控制屏幕显示的对象(例如文本、图像)的物理尺寸,在显示器屏幕的显示分辨率固定的情况下,DPI越大,则对象在屏幕中的物理尺寸越大。

2)扫描密度感知模式,操作系统支持应用程序读取显示器的屏幕的扫描密度的技术。以Windows系统为例,对扫描密度的支持包括以下几个级别:

不感知,应用程序的界面由操作系统强制缩放,界面模糊;

系统级感知,应用程序的界面的显示大小不受操作系统的控制,只有在扫描密度改变时,操作系统通过DWM(Desktop Window Manager,桌面窗口管理器)虚拟化对应用程序的界面进行强制缩放,界面模糊;

显示器级感知:应用程序在多个显示器扩展显示时,能够感知每一个显示器的扫描密度并正常显示。

3)单屏模式,电子设备只使用一个显示器显示内容的模式。

4)多屏模式,电子设备使用多个(至少两个)显示器(简称为物理显示器/屏幕)协同显示的模式。其中,电子设备的图形处理器(例如独立显卡或CPU集成的显卡,将需要显示的内容转换为图像帧,以不断在屏幕上刷新显示)默认输出图像帧的显示器为主显示器,对主显示器的显示内容进行复制或扩展的显示器称为副显示器。其中,多屏模式的类型包括:

4.1)复制模式,即将主显示器中的内容复制到副显示器显示,主显示器和副显示器的分辨率相同;

4.2)扩展模式,即将主显示器和副显示器虚拟成一个面积更大的虚拟显示器,以对主显示器的显示空间进行空间上的延伸,主显示器和副显示器可以显示不同内容。例如主显示器显示文档内容,副显示器播放视频。主显示器和副显示器是可以被设置的。例如笔记本电脑外接显示器时,笔记本电脑的操作系统支持用户将笔记本电脑的内置显示器设置为主显示器,也支持用户将外接显示器设置为主显示器。

5)截图接口,操作系统开放给应用程序的接口,接口能够输出屏幕图片。

6)桌面环境,简称桌面,电子设备(例如计算机)成功登录操作系统后在显示器屏幕显示内容的区域,本发明实施例中泛指在显示器屏幕显示的一切内容。例如,在桌面的初始状态,以视窗(Windows)系统为例,桌面包括以下元素:任务栏、应用程序图标、和开始按钮(用于访问程序、文件夹和计算机设置);在桌面的使用状态中,桌面包括各种内容,例如网页、文档和视频等,从而初始状态的各种元素可能被部分或完全遮挡。

7)主进程(Main Process),应用程序的最初始的父进程,是执行应用程序的入口,例如可以是执行main()函数的进程。

截图是个人计算机上十分常见的操作,该操作可以将显示器展示的一部分或全部生成静态图片。在笔记本电脑普及的今天,越来越多的用户使用便捷的具有小显示器的笔记本电脑连接台式大显示器来工作和娱乐。如果连接的两个显示器有不同的扫描密度,就要求截图的应用程序的扫描密度感知模式是显示器级敏感的。而由于工作量巨大,相关技术中兼容旧版Windows系统的应用程序都没有实现扫描密度的显示器级敏感。

具体来说,应用程序没有使用新的截图进程,而是直接在应用程序的主进程中执行截图。这种情况下的截图功能的扫描密度感知模式与主进程一致,若主进程未支持显示器级感知则无法实现屏幕的精确截图,在非主显示器(副显示器)截图将出现桌面显示区域大于(显示不全)或小于显示器屏幕的现象;而若主进程支持显示器级感知,则将大大增加主进程的工作量。

如图1A所示,图1A是相关技术在副显示器的扫描密度小于主显示器的扫描密度的情况下对扩展屏幕截图的示意图。如果主进程中截图的扫描密度感知模式设置为系统级感知,且副显示器的扫描密度小于主显示器的扫描密度,在截图时,将主显示器的桌面图片110和副显示器的桌面图片120绘制到由主显示器和副显示器组成的扩展屏幕的截图窗口的画布(设置为主显示器的扫描密度)中显示时,因为截图窗口的画布是适配主显示器的扫描密度的,因此在主显示器的扫描密度(例如为200DPI)大于副显示器的扫描密度(例如为100DPI)的情况下,主显示器中桌面图片将以正常大小显示,副显示器桌面图片会过小,截图结果130中会出现黑边。

如图1B所示,图1B是相关技术在副显示器的扫描密度小于主显示器的扫描密度的情况下对副显示器截图的示意图。如果主进程中截图的屏幕感知模式设置为系统级感知,且副显示器的扫描密度小于主显示器的扫描密度,那么在针对副显示器截图时,截图结果140中将出现副显示器桌面图片150过小,截图中出现黑边的现象。

如图1C所示,图1C是相关技术在副显示器的扫描密度大于主显示器的扫描密度的情况下对副显示器截图的示意图。如果主进程中截图的屏幕感知模式设置为系统级感知,且副显示器的扫描密度大于主显示器的扫描密度,那么在针对副显示器截图时,截图结果160中将出现副显示器桌面图片170过大,无法在屏幕中完整显示的现象。

其中,当多屏模式的类型为复制模式时,主副显示器的分辨率相同,若主显示器和副显示器的物理尺寸相同,则二者的扫描密度相同,在截图时不会出现副显示器桌面过大或过小的现象。若主副显示器的物理尺寸不同,在截图时会出现副显示器桌面过大或过小的现象。

可见,相关技术无法支持显示器级感知,因此,当主显示器和副显示器的扫描密度不同时,在副显示器中将无法正确显示截图,无法实现精确截图。

基于此,本发明实施例提供一种截图处理方法、装置、电子设备和计算机可读存储介质,能够在主副显示器的扫描密度不同时,实现精确截图。本发明实施例提供的电子设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端。下面,将说明电子设备的示例性应用。

参见图2,图2是本发明实施例提供的电子设备200的一个结构示意图,图2所示的电子设备200包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。电子设备200中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。为了清楚说明起见,在图2中将各种总线都标为总线系统240。

处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。

用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。

存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。

存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器,易失性存储器可以是随机存取存储器。本发明实施例描述的存储器250旨在包括任意适合类型的存储器。

在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。

操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。

网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线等。

呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口)。

输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。

在一些实施例中,本发明实施例提供的截图处理装置可以采用软件方式实现,图2示出了存储在存储器250中的截图处理装置255,其可以是程序和插件等形式的软件,包括以下软件单元:创建模块2551、获取模块2552、确定模块2553、显示模块2554、截图生成模块2555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。

在另一些实施例中,本发明实施例提供的装置可以采用硬件方式实现,作为示例,本发明实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的截图处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specif ic Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic De vice)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件。

将结合本发明实施例提供的电子设备的示例性应用和实施,说明本发明实施例提供的截图处理方法。

参见图3A,图3A是本发明实施例提供的截图处理方法的一个流程示意图,将结合图3A示出的步骤进行说明。

在步骤101中,电子设备中运行的应用程序的第一进程创建用于截图的第二进程。

其中,电子设备中运行的应用程序包括社交网络应用程序、购物应用程序、多媒体播放应用程序等。应用程序的第一进程是应用程序执行的入口,可以是应用程序的主进程,如运行应用程序的主函数的进程;也可以是主进程创建的子进程,如专用于监听操作系统传递来的指令并进行分发的守护进程。第二进程为第一进程所创建的子进程,用于执行截图相关的操作。

在一些实施例中,当应用程序的第一进程为应用程序的主进程,且当第一进程启动时,第一进程创建第二进程,或者,当第一进程接收到操作系统发送的截图指令时,第一进程创建第二进程;在第一进程创建第二进程之后,将截图窗口的代码的路径参数发送给第二进程;第二进程根据路径参数可读取截图窗口的代码,并在获取到桌面图片的物理尺寸时创建符合物理尺寸的截图窗口。

其中,截图指令可在用户实施截图操作之后生成,也可在操作系统执行计划任务时生成。当操作系统接收到用户实施的截图操作之后,生成截图指令,并将截图指令传递给第一进程,以触发第一进程创建第二进程。截图指令的参数包括:截图时间、需要截图的显示器(主显示器/副显示器/主显示器和副显示器);截图指令的参数包括还可以包括:截图区域的位置、截图效果等。计划任务用于指示操作系统定期或不定期截图并将截图存储为日志。例如在办公场景中,日志可以用于进行危险操作分析,进而判断是否存在数据泄露风险,并触发告警。

在步骤102中,应用程序的第二进程获取目标显示器的扫描密度。

其中,目标显示器为需要被截图的显示器。截图时,若电子设备为单屏模式,则目标显示器和主显示器是同一显示器;若目标显示器为多屏模式,则目标显示器为主显示器和副显示器。

在应用程序的代码开发阶段,在第二进程使用的截图工程中已经声明第二进程的扫描密度感知模式为显示器级感知,因此,在创建第二进程之后,第二进程可向操作系统查询目标显示器的扫描密度。作为示例,可通过GetDpiForMonitor接口获取显示器的扫描密度。当目标显示器为多个时,第二进程同时获取多个目标显示器的扫描密度。

在步骤103中,应用程序的第二进程获取目标显示器的桌面图片。

在一个可能的示例中,第二进程调用操作系统开放给应用程序的截图接口,接口参数截图时间和目标显示器的标识,通过接口参数从截图接口获取与目标显示器的标识以及截图时间匹配的桌面图片。在获取桌面图片之后,第二进程还将进一步获取桌面图片的像素宽度(水平方向的像素数)和像素高度(垂直方向的像素数),并将桌面图片存储至内存中。

当处于由主显示器和至少一个副显示器协同显示的扩展模式时,目标显示器为主显示器和至少一个副显示器;此时第二进程同时获取主显示器的桌面图片和副显示器的桌面图片。

当处于由副显示器与主显示器显示相同内容的复制模式时,当目标显示器为副显示器时,第二进程获取副显示器的桌面图片;当目标显示器为主显示器时,第二进程获取主显示器的桌面图片。

在步骤104中,应用程序的第二进程根据目标显示器的扫描密度确定桌面图片的物理尺寸。

在一个可能的示例中,桌面图片的物理尺寸包括桌面图片在目标显示器中的物理宽度和物理高度,其单位为英寸。在第二进程获取桌面图片后,将桌面图片的像素宽度与目标显示器的扫描密度的比值,确定为桌面图片在目标显示器中的物理宽度,并将桌面图片的像素高度与目标显示器的扫描密度的比值,确定为桌面图片在目标显示器中的物理高度。

例如,桌面图片的像素宽度和像素高度分别为1920像素和1080像素,目标显示器的扫描密度为120DPI,则其物理宽度为16英寸,物理高度为9英寸。当处于扩展模式时,第二进程根据主显示器和副显示器的扫描密度分别确定主显示器和副显示器的桌面图片的物理尺寸。

在步骤105中,应用程序的第二进程创建符合物理尺寸的截图窗口。

在一个可能的示例中,第二进程根据桌面图片在主显示器中的物理宽度和物理高度,在目标显示器中创建符合桌面图片的物理宽度和物理高度的截图窗口。

当处于扩展模式时,第二进程在主显示器中创建符合在主显示器中的物理宽度和物理高度的部分截图窗口;第二进程根据桌面图片在副显示器中的物理宽度和物理高度,在副显示器中创建符合在副显示器中的物理宽度和物理高度的部分截图窗口;主显示器和副显示器的部分截图窗口组合为完整的截图窗口。

参见图4A和图4B,图4A和图4B是本发明实施例提供的截图窗口的示意图。当主显示器和副显示器的尺寸相同时,例如都为21.5寸的显示器,如图4A所示,在左侧的主显示器中创建截图窗口1,截图窗口1的物理尺寸与步骤104中得到的主显示器的桌面图片的物理尺寸相同;在右侧的副显示器中创建截图窗口2,截图窗口2的物理尺寸与步骤104中得到的副显示器的桌面图片的物理尺寸相同;将截图窗口1和截图窗口2拼接得到完整的截图窗口。

当主显示器和副显示器的尺寸不同时,如图4B中的虚线所示,截图窗口为包围主显示器3和副显示器4的矩形,其中,主显示器3和副显示器4为有效显示区域,主显示器3下方的部分截图窗口并无显示内容。

在步骤106中,应用程序在截图窗口中显示桌面图片。

在一个可能的示例中,当处于扩展模式时,目标显示器包括主显示器和副显示器;将主显示器的桌面图片显示在主显示器创建的部分截图窗口中,将副显示器的桌面图片显示在副显示器创建的部分截图窗口中。当主显示器和副显示器的尺寸相同时,将主显示器的桌面图片按照步骤104中得到的物理尺寸显示于截图窗口1中,将副显示器的桌面图片按照步骤104中得到的物理尺寸显示于截图窗口2中。当主显示器和副显示器的尺寸不同时,将主显示器的桌面图片按照步骤104中得到的物理尺寸显示于主显示器3中,将副显示器的桌面图片按照步骤104中得到的物理尺寸显示于副显示器4中。

在步骤107中,应用程序的第二进程根据截图窗口中的桌面图片生成截图结果。

在一个可能的示例中,在步骤107之前,第一进程获取截图的效果数据,将效果数据序列化为字节序列,并将字节序列发送给第二进程。其中,序列化是指把对象转换为字节序列的过程,反序列化是指把字节序列恢复为对象的过程;序列化将对象转换成有序字节流,以便在网络上传输对象或者保存对象在本地文件中,保证对象的完整性和可传递性。效果数据可以是预先设定的,也可是在用户触发截图操作时才设置的,包括隐形水印(包括身份信息)、文字和马赛克等相关的数据。

在一个可能的示例中,如图5所示,图5是本发明实施例提供的截图处理方法的一个流程示意图,将结合图5示出的步骤对步骤107进行说明。

在步骤201中,第二进程反序列化字节序列,得到效果数据。

在步骤202中,第二进程根据效果数据在截图窗口的工具栏中显示能够添加的特效。

在步骤203中,第二进程响应于基于特效对桌面图片的特效编辑操作,将桌面图片与根据特效编辑操作生成的特效数据融合,得到截图结果。

其中,如果效果数据中需要植入登录用户的身份信息,因为第二进程无法获知身份信息,因此只能采用由第一进程向第二进程传递序列化后的效果数据的方式;如果效果数据中不包括用户的身份信息,则“第一进程获取截图的效果数据,将效果数据序列化为字节序列,并将字节序列发送给第二进程”的步骤可以省略,相应的,步骤201也可以省略。第二进程在创建的截图窗口中显示工具栏,在工具栏中显示多个能够添加的特效,支持用户使用工具栏对桌面图片进行特效编辑操作以生成特效数据,并将特效数据与桌面图片融合;当用户未使用工具栏对桌面图片进行特效编辑操作时,不生成特效数据,也不需要进行特效数据与桌面图片的融合。

在一个可能的示例中,如果是全屏截图,则将全屏设定为截图区域,将截图窗口中显示的桌面图片作为截图结果。此时,可在截图窗口显示的桌面图片中进行特效编辑。如果是区域截图,即只选取全屏(截图窗口中显示的桌面图片)中的一部分作为截图区域。

当在截图窗口中显示桌面图片时,第二进程响应于截图区域选取操作,获取截图区域的位置参数(如截图区域左上角和右下角坐标/中心坐标和截图区域大小),其中,截图区域选取操作用于根据截图区域的物理尺寸确定截图为全屏截图或区域截图;在截图窗口中,根据截图区域的位置参数显示截图区域的位置,例如,以虚线框的方式在桌面图片中显示截图区域的位置。之后,根据截图区域的位置参数,对桌面图片进行抠图处理,即将截图区域从整个桌面图片中截取出来;将抠图处理后得到的截图区域的图片,与在截图区域上根据特效编辑操作生成的特效数据融合,得到截图结果。

在步骤107之后,第二进程将截图结果发送到操作系统的数据共享位置中,并通知第一进程截图完成,以使第一进程结束第二进程。

其中,数据共享位置是操作系统中用于共享数据的位置,例如剪切板,因为剪切板在内存中占有一定的存储空间,所以剪切板可以保存共享数据。

在一个可能的示例中,在截图完成后,也可以不结束第二进程,即第二进程可以常驻后台,或者,在第二进程的空闲时间超出空闲时长阈值时,才由第一进程结束第二进程,如此,当接收到用户的截图操作时,不需要再通过第一进程创建截图的第二进程,可直接通过第二进程执行截图相关操作,响应速度更快,效率更高。第二进程使用系统接口发送系统消息给第一进程,以通知第一进程已经完成截图,第一进程在接收到系统消息后,生成结束进程消息,并将结束进程消息发送给第二进程以结束第二进程。。之后,如果主进程需要使用截图结果,直接调用数据共享位置中的截图结果即可。

上述步骤中,主显示器和副显示器的桌面图片、截图区域的图片以及融合后的截图结果均存储到内存中,在截图完成,第二进程结束后,操作系统清理内存中保存的桌面图片和截图区域的图片。

可见,本发明实施例通过第二进程进行截图相关处理操作,可以避免截图异常时影响第一进程。第二进程获取目标显示器的扫描密度,进而可以确定截图窗口以及截图窗口中的桌面图片的物理尺寸,从而实现截图窗口和桌面图片的正确显示,不会超出显示器显示范围,也不会过小出现黑边。根据截图窗口中的桌面图片生成截图结果,不仅可以实现精确的截图,还能让截图结果带上显示于截图结果上的特效数据。

以下以扩展模式为例对截图处理方法进行说明,参见图3B,图3B是本发明实施例提供的截图处理方法的一个流程示意图,将结合图3B示出的步骤进行说明。

在步骤301中,第一进程序列化效果数据,得到字节序列;

在步骤302中,第一进程创建用于截图的第二进程;

在步骤303中,第一进程发送字节序列给第二进程;

在步骤304中,第二进程反序列化字节序列,得到效果数据;

在步骤305中,第二进程获取主显示器和至少一个副显示器的扫描密度;

在步骤306中,第二进程获取主显示器和至少一个副显示器的桌面图片;

在步骤307中,第二进程根据主显示器和至少一个副显示器的扫描密度分别确定主显示器和至少一个副显示器的桌面图片的物理尺寸;

在步骤308中,第二进程根据主显示器的桌面图片的物理尺寸在主显示器中创建部分截图窗口;

在步骤309中,第二进程根据至少一个副显示器的桌面图片的物理尺寸,在至少一个副显示器中创建部分截图窗口;

在步骤310中,第二进程将主显示器和至少一个副显示器的部分截图窗口组合为完整的截图窗口;

在步骤311中,第二进程在完整的截图窗口中显示主显示器和至少一个副显示器的桌面图片;

在步骤312中,第二进程根据效果数据在完整的截图窗口中显示能添加的特效;

在步骤313中,第二进程响应于基于特效对主显示器和至少一个副显示器的桌面图片的特效编辑操作,将桌面图片与根据特效编辑操作生成的特效数据融合,得到截图结果;

在步骤314中,第二进程将截图结果发送到操作系统的数据共享位置中,生成系统消息;

在步骤315中,第二进程发送系统消息给第一进程;

在步骤316中,第一进程生成结束进程消息;

在步骤317中,第一进程发送结束进程消息给第二进程;

在步骤318中,结束第二进程。

其中,在扩展模式时,目标显示器为主显示器和至少一个副显示器。对于上述步骤的详细描述可以参见上文描述,此处不再进行赘述。

下面,将说明本发明实施例在一个实际的应用程序中的示例性应用。在应用程序的不同阶段中,电子设备需要进行不同的操作,以实现应用程序中的精确截图。以下将按照应用程序的代码开发阶段和应用程序的运行阶段这两个阶段对本发明实施例进行说明。

1、在应用程序的代码开发阶段

在应用程序的代码开发阶段,需要确定应用程序的主进程所使用的主工程中与截图相关的代码,并进行工程拆分,即将与截图相关的代码从主工程中分离出来,以作为用于截图的子进程使用的截图工程,截图工程与主工程相独立。在截图工程的入口有用于创建截图窗口的代码。完成工程拆分后,将截图工程声明为显示器级感知,如此,可以保证针对任何一个显示器的截图都能获取到对应显示器的扫描密度。

2、在应用程序运行阶段,以不同的截图场景进行说明

场景1:扩展模式下,目标显示器为主显示器和至少一个副显示器,进行全屏/区域截图。

参见图6,图6是本发明实施例提供的截图的一个流程示意图。扩展模式下,主显示器和副显示器是作为一个完整的(虚拟)显示器,全屏截图实际上会形成同时包括主显示器桌面图片和副显示器桌面图片的截图。

参见图7,图7是本发明实施例提供的在应用程序的会话窗口截图的示意图。用户操作副显示器桌面中的应用程序的过程中,通过一定的操作触发截图,如,按下截图快捷键如“shift+alt+A”,或者点击如图7所示的截图按钮701。在接收到用户的触发截图操作之后,通过如下步骤进行截图处理。

步骤1、图6中的主进程601获取当前登录用户(例如本地或云端)的效果数据(比如:文字、马赛克、表示用户身份信息的隐形水印),将效果数据转化(序列化)并合并成一个字符串(字节序列);主进程创建用于截图的子进程602,并将已序列化的字符串与子进程的其他执行参数(如路径参数,用于指向截图窗口的代码的存储位置)一起传递给子进程;子进程入口处对上述已序列化的字符串进行反序列化,解析出主进程传递的效果数据。

其中,主进程向子进程传递的效果数据可以是预先设定的,也可以是在主进程的窗口中触发截图操作时才设置的,包括隐形水印(包括身份信息)、文字和马赛克等相关的数据。

如果效果数据中需要植入登录用户的身份信息,因为子进程无法获知身份信息,因此只能采用由主进程向子进程传递的方式;如果效果数据中不包括用户的身份信息,则“主进程向子进程传递效果数据”的步骤可以缺省。在子进程的截图窗口中也为用户提供了特效设置功能。

步骤2、子进程通过截图工程分别读取主显示器和副显示器的扫描密度,并根据主显示器和副显示器的扫描密度计算主显示器和副显示器的桌面图片的物理尺寸。

电子设备在读取主显示器和副显示器的扫描密度后,确定主显示器和副显示器的桌面图片的分辨率,根据主/副显示器的桌面图片的水平分辨率与主/副显示器的扫描密度之比得到主/副显示器的桌面图片的物理宽度,根据主/副显示器的桌面图片的垂直分辨率与主/副显示器的扫描密度之比得到主/副显示器的桌面图片的物理高度。

步骤3、子进程根据步骤2中得到的物理尺寸创建截图窗口,通过调用接口获取主显示器和副显示器的桌面图片,将主显示器的桌面图片和副显示器的桌面图片按照各自的物理尺寸拼接为一个完整的图片,在截图窗口中显示。

子进程在由主显示器和副显示器构成的虚拟显示器中创建截图窗口,截图窗口的物理尺寸等于主显示器的桌面图片和副显示器的桌面图片最外围的矩形的物理尺寸。

子进程调用操作系统接口来分别获取主显示器和副显示器的桌面图片;操作系统接口是操作系统开放给应用程序的接口,例如Windows系统提供的DX GI(DirectXGraphics Infrastructure,DirectX图形接口),接口参数包括截图时间和显示器标识。接口被调用时,操作系统的镜像驱动从显存中读取与显示器标识以及截图时间对应的图像并输出。在步骤3中,子进程还支持在截图窗口中进一步选定截图区域,以进行区域截图,根据截图区域的位置参数(如左上角和右下角坐标/中心坐标以及区域的像素宽度和像素高度)进行抠图操作,得到的截图区域的图片会被保存到内存中。

步骤4、子进程在截图窗口的工具栏中显示可在截图窗口中添加的特效,如水印,马赛克、文字等;此时用户可以调用工具栏对截图窗口中的图片进行特效编辑,保存特效数据。如图7中的工具栏702所示。步骤4包括以下两种情况。

4.1、子进程接收到主进程发送的效果数据(例如植入用户身份信息的特效数据),并在工具栏中显示可以添加到截图中的特效,支持通过工具栏对图片进行特效设定(例如特效数量、显示位置、效果的设定)。

4.2、不论是否接收到主进程发送的效果数据,子进程都可以在截图窗口中呈现特效的工具栏,支持通过工具栏对图片进行特效设定。

步骤5、子进程将添加到截图中的特效数据与内存中的截图区域的图片融合。

融合的方式是多样的,以水印为例,可以将显式水印直接显示在截图上,也可以将隐式水印写入图片数据中但不直接渲染在图片上。

步骤6、在数据融合后,将融合了特效数据的截图区域的图片(最终截图)保存成图片文件,输出到系统剪切板,同时使用系统接口函数向主进程发送系统消息WM_COPYDATA(用于进行进程间的数据传输),通知主进程截图已经完成,主进程在接收到系统消息后,生成结束进程消息,并将结束进程消息发送给子进程以结束子进程。,同时清理内存中的图片数据和截图区域的图片。

若子进程中需要带上不包括最终截图的执行结果信息给主进程,则可以在子进程中将需要的数据封装好,通过WM_COPYDATA的参数发送给主进程。此外,由于系统接口函数是同步执行的,子进程可以在主进程接收数据完毕后再销毁封装的数据,不会出现数据未发送完毕就释放内存的异常现象。如果主进程需要使用最终截图,直接调用剪切板中的图片文件即可。

场景2:在复制模式下,目标显示器为主/副显示器,进行全屏/区域截图。

在场景2中,用户操作主/副显示器的桌面中的应用程序的过程中,触发截图;电子设备获取主/副显示器的桌面图片;在主/副显示器桌面中显示截图窗口,并在主/副显示器的截图窗口中显示主/副显示器的桌面图片。

场景3:单屏模式。

在场景3中,只有一个显示器,此时,截图不会出现问题,其截图过程与场景2类似。

下面继续说明本发明实施例提供的截图处理装置255的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器的截图处理装置255中的软件模块可以包括:创建模块2551,用于应用程序的第一进程创建用于截图的第二进程;获取模块2552,用于第二进程获取目标显示器的扫描密度;其中,目标显示器为需要被截图的显示器;确定模块2553,用于第二进程获取目标显示器的桌面图片,并根据目标显示器的扫描密度确定桌面图片的物理尺寸;显示模块2554,用于第二进程创建符合物理尺寸的截图窗口,并在截图窗口中显示桌面图片;截图生成模块2555,用于第二进程根据截图窗口中的桌面图片生成截图结果。

在一些实施例中,创建模块,用于:当应用程序的第一进程为应用程序的主进程,且当第一进程启动时,第一进程创建第二进程,或者,当第一进程接收到操作系统发送的截图指令时,第一进程创建第二进程;第一进程将截图窗口的代码的路径参数发送给第二进程;其中,路径参数用于使第二进程根据路径参数读取截图窗口的代码,并在获取到物理尺寸时创建符合物理尺寸的截图窗口。

在一些实施例中,获取模块,用于:第二进程向操作系统声明第二进程的扫描密度感知模式为显示器级感知,以向操作系统查询目标显示器的扫描密度。

在一些实施例中,确定模块,用于:第二进程调用操作系统的截图接口,以从截图接口获取与目标显示器的标识以及截图时间匹配的桌面图片;将桌面图片的像素宽度与目标显示器的扫描密度的比值,确定为桌面图片在目标显示器中的物理宽度,并将桌面图片的像素高度与目标显示器的扫描密度的比值,确定为桌面图片在目标显示器中的物理高度。

在一些实施例中,显示模块,用于:第二进程根据桌面图片在目标显示器中的物理宽度和物理高度,在目标显示器中创建符合物理宽度和物理高度的截图窗口。

在一些实施例中,显示模块,还用于:当处于扩展模式时,目标显示器包括主显示器和副显示器;将主显示器的桌面图片显示在主显示器创建的部分截图窗口中,将副显示器的桌面图片显示在副显示器创建的部分截图窗口中。

在一些实施例中,截图生成模块,用于:第一进程获取截图的效果数据,将效果数据序列化为字节序列,并将字节序列发送给第二进程;第二进程反序列化字节序列,得到效果数据;根据效果数据在截图窗口的工具栏中显示能够添加的特效;响应于基于特效对桌面图片的特效编辑操作,将桌面图片与根据特效编辑操作生成的特效数据融合,得到截图结果。

在一些实施例中,截图生成模块,还用于:第二进程响应于截图区域选取操作,获取截图区域的位置参数;在截图窗口中,根据截图区域的位置参数显示截图区域的位置。

在一些实施例中,截图生成模块,还用于:根据截图区域的位置参数,对桌面图片进行抠图处理;将抠图处理后得到的截图区域的图片,与根据特效编辑操作生成的特效数据融合。

在一些实施例中,截图生成模块,还用于:第二进程将截图结果发送到操作系统的数据共享位置中,并通知第一进程截图完成,以使第一进程结束第二进程。

本发明实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的截图处理方法,例如,如图3A示出的截图处理方法。

在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EP ROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。

在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。

作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。

作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。

综上所述,本发明实施例由第一进程创建第二进程进行截图处理,由于将截图处理从第一进程解耦,可以减轻第一进程的工作量,保证第一进程的稳定运行;第二进程中根据目标显示器的扫描密度创建截图窗口,能够使截图窗口的物理尺寸与目标显示器适配,进而保证基于截图窗口生成的截图结果的精确性。

以上,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。

26页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:智能体控制装置、智能体控制方法、以及非临时性的记录介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类