CN111833417A - 安卓应用程序实现黑白模式的方法及系统 - Google Patents
安卓应用程序实现黑白模式的方法及系统 Download PDFInfo
- Publication number
- CN111833417A CN111833417A CN202010675080.6A CN202010675080A CN111833417A CN 111833417 A CN111833417 A CN 111833417A CN 202010675080 A CN202010675080 A CN 202010675080A CN 111833417 A CN111833417 A CN 111833417A
- Authority
- CN
- China
- Prior art keywords
- android
- android application
- color
- black
- view container
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/90—Determination of colour characteristics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/80—Creating or modifying a manually drawn or painted image using a manual input device, e.g. mouse, light pen, direction keys on keyboard
Abstract
本公开是关于一种安卓应用程序实现黑白模式的方法、系统及终端设备。该方法包括:获取安卓应用显示窗口的顶级父View容器;配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;通过所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。本公开提供的方案,能实现简单快捷的进行安卓应用的整体黑白灰度化。
Description
技术领域
本公开涉及软件技术领域,尤其涉及一种安卓应用程序实现黑白模式的方法及系统。
背景技术
目前不少网站和App(Application,应用程序)应用可以实现页面黑白灰度化(也称为黑白模式)。其中网页端可以通过CSS(Cascading Style Sheets,层叠样式表)样式为整个页面添加这个效果,App实现起来普遍比较复杂。
谷歌发布的Android(安卓)Q开始提供一个新的Dark(深色)主题,适用于Android系统UI(User Interface,用户界面)和设备上运行的应用程序。安卓应用“黑白模式”,可以通过Android Q的两种主题间的切换(主要是各种背景色,字体颜色和图标),需要定义两套不同的主题,根据是否是黑白模式进行主题的切换。该方案需要定义和设置大量的属性和字段配置到对应控件中,还需要对server(服务器)下发的图片单独做灰度处理,适配量大且繁琐,代码侵入度高,并且不能很好地兼容webView(网页视图)和视频播放。
综上可知,相关技术在实际使用上显然存在不便与缺陷,所以有必要加以改进。
发明内容
为克服相关技术中存在的问题,本公开提供一种安卓应用程序实现黑白模式的方法及系统,以实现简单快捷的进行安卓应用程序的整体黑白灰度化。
根据本公开实施例的第一方面,提供一种安卓应用程序实现黑白模式的方法,所述方法包括:
获取安卓应用显示窗口的顶级父View容器;
配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;
通过所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
在一种实施方式中,所述顶级父View容器为DecorView;所述获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView;
所述顶级父View容器DecorView的获取是在所述安卓系统中的Activity生命周期中的setContentView完成之后。
在一种实施方式中,所述配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像包括:
配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
在一种实施方式中,所述配置所述安卓系统的颜色矩阵包括:
将所述安卓系统的颜色矩阵中表示RGB的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1。
在一种实施方式中,所述通过顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式包括:
所述顶级父View容器调用setLayerType执行硬件加速绘制;
获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
根据所述硬件加速绘制模型根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
根据本公开实施例的第二方面,提供一种安卓应用程序实现黑白模式的系统,包括:
获取模块,用于获取安卓应用显示窗口的顶级父View容器;
配置模块,用于配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;
处理模块,用于通过所述顶级父View容器组件使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
在一种实施方式中,所述获取模块获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView;
所述获取模块是在所述安卓系统中的Activity生命周期中的setContentView完成之后,获取所述顶级父View容器DecorView。
在一种实施方式中,所述配置模块包括:
第一配置子模块,用于配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
第二配置子模块,用于配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
第三配置子模块,用于配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
在一种实施方式中,所述第一配置子模块将所述安卓系统的颜色矩阵中表示RGB的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1,以将所述安卓应用显示的彩色图像调整为过程灰度图像。
在一种实施方式中,所述处理模块包括:
调用子模块,通过顶级父View容器调用setLayerType执行硬件加速绘制;
获取子模块,用于获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
绘制子模块,用于根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
根据本公开实施例的第三方面,提供一种终端设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上所述的方法。
本公开的实施例提供的技术方案可以包括以下有益效果:首先获取安卓应用显示窗口的顶级父View容器;然后配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;最后所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。由此,通过配置应用程序显示的顶级窗口,利用顶级父View容器进行统一处理,可以简单快捷的进行安卓应用的整体黑白灰度化也即黑白模式,减少适配量,降低原代码的侵入度。
本公开的实施例,还可以在安卓系统的Activity生命周期中的setContentView完成后获取安卓应用显示窗口的顶级父View容器DecorView。在所述配置安卓系统的颜色矩阵及画笔控件时,通过配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;通过配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;最后通过配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。以及,通过所述顶级父View容器调用setLayerType执行硬件加速绘制;再获取所述安卓应用在启用硬件加速后的硬件加速绘制模型,根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。由此,简便的实现安卓应用的整体黑白灰度化,减少适配量,降低原代码的侵入度,也可以解决安卓应用黑白化方案中webView和视频播放的适配问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1是根据本公开一示例性实施例示出的一种安卓应用程序实现黑白模式的方法的流程示意图;
图2是相关的安卓应用程序的视图层级示意图;
图3是相关的安卓系统中的Activity的生命周期中与Window视图的联系方法流程图;
图4是根据本公开一示例性实施例示出的一种安卓应用程序实现黑白模式的方法的流程另一示意图;
图5是根据本公开一示例性实施例示出的一种安卓应用程序实现黑白模式的系统的结构示意图;
图6是根据本公开一示例性实施例示出的一种安卓应用程序实现黑白模式的系统的结构另一示意图;
图7是根据本公开一示例性实施例示出的一种终端设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语“第一”、“第二”、“第三”等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
本公开提供了一种安卓应用程序实现黑白模式的方法,可以实现简单快捷的进行安卓应用程序的整体黑白灰度化。
以下结合附图详细描述本公开实施例的技术方案。
图1是根据本公开一示例性实施例示出的一种安卓应用程序实现黑白模式的方法的流程示意图。以下描述中将安卓应用程序简称为安卓应用。
参见图1,所述方法包括:
步骤S101、获取安卓应用显示窗口的顶级父View容器。
在该实施例中,首先可以先获取安卓应用显示窗口的顶级父View容器;如图2所示的安卓应用的视图层级,无论是Activity(活动页面)、Fragment(碎片)、Toast(提示框)或者Dialog(对话框),它们的视图都是附加到Window上,因此Window可以理解为是View(视图)的承载者和管理者。Window有三种类型,分别是应用Window、子Window和系统Window。其中,应用类Window对应一个Acitivity,子Window不能单独存在,需要依附在特定的父Window中,比如常见的Fragment、Dialog就是一个子Window。系统Window是需要声明权限才能创建的Window,比如Toast和系统状态栏都是系统Window。
在本公开的一个实施例中,所述顶级父View容器为DecorView;所述获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView。DecorView是Windows中最顶层View,也是FrameLayout(帧布局)的子类,它里面包含了一个有ActionBar(操作栏)以及mContentParent(应用根布局)的LinearLayout(线性布局)。Activity中setContentView(设置视图布局)或者Fragment的onCreateView(创建Fragment对应的视图)其实就是通过LayoutInflater将技术人员编写的XML(Extensible MarkupLanguage,可扩展标记语言)布局转换成View并添加到mContentParent中。因此,只需要获取Activity的DecorView这个顶层容器则可以统一的处理和进行Activity基类封装,就可以达到安卓应用全局整体适配的效果,一次性解决子Window和子View的适配问题。
步骤S102、配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像。
在获取了安卓应用显示窗口的顶级父View容器之后,则需要配置安卓系统的颜色矩阵及画笔控件,在安卓系统中,使用一个颜色矩阵处理图像的色彩效果,而画笔控件是安卓系统中自定义控件中非常重要的工具,用于调整多项绘图参数,通过对颜色矩阵及画笔控件配置,可以将所述安卓应用显示的彩色图像调整为操作人员需要的灰度图像,即所述预期的灰度图像。
步骤S103、通过所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
最后,顶级父View容器使用与所述安卓系统适配的硬件加速绘制方式进行绘制,而在顶级父View容器启动后安卓应用的框架会更新新的框架绘制模型,也即硬件加速绘制模型,采用该硬件加速绘制模型进行绘制,将所述安卓应用全局显示为黑白模式,由此实现了简单快捷的进行安卓应用的整体黑白灰度化,减少适配量,降低原代码的侵入度,也可以解决安卓应用黑白化方案中webView和视频播放的适配问题。
图3是相关的安卓系统中的Activity的生命周期中与Window视图的联系方法流程图。
在本公开的一个实施例中,所述顶级父View容器DecorView的获取是在所述安卓系统中的Activity生命周期中的setContentView完成之后。在图3中示出了所述安卓系统中的Activity的生命周期,包含此过程中和Window视图的联系方法流程,其中黑色的虚线表示在方法执行时创建了箭头指向的对象。具体的可以包括:
步骤S301中,Activity.attach0执行时创建Window对象;
步骤S302中,Activity.attach1执行时为Window关联WindowManager(窗口管理);
WindowManager是继承于ViewManager接口,而ViewManager提供了添加View、删除View、更新View的方法。
步骤S303中,调用Window,初始化DecorView;
步骤S304中,初始化ViewRootimpl。
ViewRootImpl是一个视图层次结构的顶部,它实现了View与WindowManager之间所需要的协议,作为WindowManagerGlobal中大部分的内部实现。
从此流程以及图3中可以看出DecorView的初始化是在Activity的setContentView完成的,所以在Activity基类的封装中,获取DecorView需要在setContentView后。
在本公开的一个实施例中,所述配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像包括:
配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
在该实施例中,对于所述安卓系统的颜色矩阵,其使用一个颜色矩阵—ColorMatrix处理图像的色彩效果。对于图像的每个像素点,都有一个颜色分量矩阵用于保存颜色的RGBA(显示通道)值,Android(安卓)系统中的颜色矩阵是一个4x5的数字矩阵,它用于对图片的色彩进行处理。如果需要改变色彩显示效果,在Android系统中,会采用矩阵的乘法运算来修改颜色分量矩阵的值,如下面的公式1进行计算。
其中:
a,b,c,d,e表示三原色中的红色;
f,g,h,i,j表示三原色中的绿色;
k,l,m,n,o表示三原色中的蓝色;
p,q,r,s,t表示颜色的透明度;
其中第五列用于表示颜色的偏移量;
在此步骤中,所述配置所述安卓系统的颜色矩阵包括:
将所述安卓系统的颜色矩阵中表示RGB(red,green,blue,红绿蓝)的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1。即为了实现黑白化的灰度效果,需要把RGB的三色通道的数值设置为一样,即R=G=B;同时为了保证图像的亮度,需要使同一个通道中的R+G+B的结果接近1。所以在Android系统中,可以按照0.213R,0.715G和0.072B的比例构成像素灰度值,以将所述安卓应用显示的彩色图像调整为过程灰度图像(相对于最终的预期灰度图像而言)。所述过程灰度图像示例代码如下:
对于所述安卓系统的颜色矩阵的过滤器的配置,可以将上一步骤中的配置结果,即获得的所述过程灰度图像添加到安卓系统的颜色矩阵过滤器实例上,相当于在View上添加了一层灰度滤镜,由此为所述过程灰度图像添加灰度滤镜;示例代码如下:
对于所述安卓系统的画笔控件(Paint)的配置,安卓系统中画笔Paint是自定义控件中非常重要的工具,可以用于设置颜色、测量文字、设置图层混合模式、颜色滤镜等多项绘图参数,在上一步骤的中灰度滤镜效果最终设置在画笔实例上,用于在窗口上绘制出需要的黑白灰度化效果,由此实现将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。示例代码如下:
在本公开的一个实施例中,所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式包括:
所述顶级父View容器调用setLayerType执行硬件加速绘制;
获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
根据所述硬件加速绘制模型根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
在该实施例中,在前述多个步骤完成后,最终在此步骤通过View容器调用setLayerType执行硬件加速绘制,实现所述安卓应用的整体黑白化效果。从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速一般是使用GPU(GraphicsProcessing Unit,图形处理器)进行View上的绘制操作。硬件加速可以在四个级别开启:Application,Activity,Window和View。由于四个级别中只有View级别支持画笔配置,因此在本申请的方案中选用的是View级别加速。
启用硬件加速后,获取Android框架中新的框架绘制模型也即硬件加速绘制模型,则根据所述硬件加速绘制模型可以将所述安卓应用全局显示为黑白模式。
其中所述新的框架绘制模型也即硬件加速绘制模型绘制步骤可以如下:
1.Invalidate the hierarchy;
2.记录和更新显示列表;
3.绘制显示列表。
需要说明的是,与使用软件绘制的模型不同,硬件加速绘制模型中Android系统会记录绘制命令到显示列表,而不是立即执行绘制命令;并且只记录和更新标记为脏(通过invalidate())的View,从而避免了执行不必要的绘制。
参见图4,根据本公开一示例性实施例示出的一种安卓应用全局实现黑白模式的方法的流程示意图。
参见图4,所述方法包括:
步骤S401中,获取安卓应用显示窗口的顶级父View容器DecorView。
在该步骤中,需要获取安卓应用显示窗口的顶级父View容器DecorView;如图2所示的安卓应用的视图层级,无论是Activity、Fragment、Toast或者Dialog,它们的视图都是附加到Window上,因此Window可以理解为是View的承载者和管理者。Window有三种类型,分别是应用Window、子Window和系统Window。应用类Window对应一个Acitivity,子Window不能单独存在,需要依附在特定的父Window中,比如常见的Fragment、Dialog就是一个子Window。系统Window是需要声明权限才能创建的Window,比如Toast和系统状态栏都是系统Window。在本公开的一个实施例中,所述顶级父View容器为DecorView;所述获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView。DecorView是Windows中最顶层View,也是FrameLayout的子类,它里面包含了一个有ActionBar以及mContentParent的LinearLayout。Activity中setContentView或者Fragment的onCreateView其实就是通过LayoutInflater将技术人员编写的XML布局转换成View并添加到mContentParent中。因此只需要获取Activity的DecorView这个顶层容器则可以统一的处理和Activity基类封装,达到安卓应用全局整体适配的效果,一次性解决子Window和子View的适配问题。
步骤S402中,对所述安卓应用的颜色矩阵进行配置。
对于所述安卓系统中应用的颜色矩阵,使用的是ColorMatrix处理图像的色彩效果。对于图像的每个像素点,都有一个颜色分量矩阵用于保存颜色的RGBA(显示通道)值,Android(安卓)系统中的颜色矩阵是一个4x5的数字矩阵如上述的公式1进行计算方式。将所述安卓系统的颜色矩阵中表示RGB(red,green,blue,红绿蓝颜色表示法)的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1。即为了实现黑白化的灰度效果,需要把RGB的三色通道的数值设置为一样,即R=G=B;同时为了保证图像的亮度,需要使同一个通道中的R+G+B的结果接近1。由此可以将所述安卓应用显示的彩色图像调整为过程灰度图像。
步骤S403中,对所述安卓应用的颜色矩阵进行过滤器配置。
在该步骤中,可以将上一步骤中的配置结果,即所述过程灰度图像添加到android系统的颜色矩阵过滤器实例上,以为所述过程灰度图像添加灰度滤镜。
步骤S404中,对所述安卓应用的画笔控件进行配置。
Android系统中画笔Paint是自定义控件中非常重要的工具,可以用于设置颜色、测量文字、设置图层混合模式、颜色滤镜等多项绘图参数,在上一步骤中的灰度滤镜效果最终设置在画笔控件实例上,其用于在窗口上绘制出需要的黑白灰度化效果,由此实现将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
步骤S405中,顶级View容器使用硬件加速绘制方式进行绘制。
在前述四个步骤完成后,在此步骤通过View容器调用setLayerType执行硬件加速绘制,实现所述安卓应用的整体黑白化效果。硬件加速是使用GPU进行View上的绘制操作。硬件加速选用的是View级别加速。在启用硬件加速后,Android框架会利用新的框架绘制模型也即硬件加速绘制模型,则根据所述硬件加速绘制模型,完成整个安卓应用全局实现黑白灰度化的流程。
与前述应用功能实现方法实施例相对应,本公开还提供了一种安卓应用程序实现黑白模式的系统、终端设备及相应的实施例。
图5是根据本公开一示例性实施例示出的安卓应用程序实现黑白模式的系统的结构示意图。
该安卓应用程序实现黑白模式的系统,包括:获取模块10、配置模块20、处理模块30。
获取模块10,用于获取安卓应用显示窗口的顶级父View容器;
配置模块20,用于配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;
处理模块30,用于通过所述顶级父View容器组件使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
在该实施例中,获取模块10获取安卓应用显示窗口的顶级父View容器。所述顶级父View容器为DecorView;所述获取模块10获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView。通过获取Activity的DecorView这个顶层容器则可以统一的处理和Activity基类封装,达到安卓应用全局整体适配的效果,一次性解决子Window和子View的适配问题。之后,配置模块20配置安卓系统的颜色矩阵及画笔控件,可以将所述安卓应用显示的彩色图像调整为操作人员需要的灰度图像,即将所述安卓应用显示的彩色图像调整为预期的灰度图像。最后,包括处理模块30通过顶级父View容器组件使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。由此实现了简单快捷的进行安卓应用的整体黑白灰度化,减少适配量,降低原代码的侵入度,解决其他方案webView和视频播放的适配问题。
参见图3示出的所述安卓系统中的Activity的生命周期,包含此过程中和Window视图的联系。其中DecorView的初始化是在Activity的setContentView完成的,所以在本公开的一个实施例中,所述获取模块10是在所述安卓系统中的Activity生命周期中的setContentView完成之后,获取所述顶级父View容器DecorView。
图6是根据本公开一示例性实施例示出的安卓应用程序实现黑白模式的系统的结构另一示意图。
该安卓应用程序实现黑白模式的系统,包括:获取模块10、配置模块20、处理模块30。
其中,所述配置模块20包括:第一配置子模块21、第二配置子模块22、第三配置子模块23。
第一配置子模块21,用于配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
第二配置子模块22,用于配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
第三配置子模块23,用于配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
在该实施例中,第一配置子模块21配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;具体的,第一配置子模块21将所述安卓系统的颜色矩阵中表示RGB的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1,以将所述安卓应用显示的彩色图像调整为过程灰度图像。例如,按照上述公式(1),在Android系统中,按照0.218R,0.711G和0.071B的比例构成像素灰度值,以将所述安卓应用显示的彩色图像调整为过程灰度图像。第二配置子模块22对所述安卓系统的颜色矩阵的过滤器进行配置,可以将第一配置子模块21的配置结果,即获得的所述过程灰度图像添加到android系统的颜色矩阵过滤器实例上,为所述过程灰度图像添加灰度滤镜。最后第三配置子模块23配置所述安卓系统的画笔控件的颜色、测量文字、设置图层混合模式、颜色滤镜等多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
所述处理模块30包括:调用子模块31、获取子模块32、绘制子模块33。
调用子模块31,用于通过顶级父View容器调用setLayerType执行硬件加速绘制;
获取子模块32,用于获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
绘制子模块33,用于根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
在该实施例中,通过顶级父View容器调用setLayerType执行硬件加速绘制;执行硬件加速绘制,实现所述安卓应用的整体黑白化效果。启用硬件加速后,获取子模块32获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;绘制子模块33根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
因此,本发明通过配置应用显示的顶级窗口,可以更加简单快捷的进行安卓应用的整体黑白灰度化,减少适配量,降低原代码的侵入度,也可以解决安卓应用黑白化方案中webView和视频播放的适配问题。
图7是根据本公开一示例性实施例示出的一种终端设备的结构示意图。该终端设备例如可以是移动终端设备或服务器设备等。
本公开提供了一种终端设备1000,包括:
处理器1020;以及
存储器1010,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器1020执行如上述任一实施例中所述的方法。
参见图7,终端设备1000包括存储器1010和处理器1020。
处理器1020可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1010可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储系统。其中,ROM可以存储处理器1020或者计算机的其他模块需要的静态数据或者指令。永久存储系统可以是可读写的存储系统。永久存储系统可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储系统采用大容量存储系统(例如磁或光盘、闪存)作为永久存储系统。另外一些实施方式中,永久性存储系统可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1010可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1010可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器1010上存储有可执行代码,当可执行代码被处理器1020处理时,可以使处理器1020执行上文述及的方法中的部分或全部。
上文中已经参考附图详细描述了本公开的方案。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。本领域技术人员也应该知悉,说明书中所涉及的动作和模块并不一定是本公开所必须的。另外,可以理解,本公开实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减,本公开实施例装置和系统中的模块可以根据实际需要进行合并、划分和删减。
此外,根据本公开的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本公开的上述方法中部分或全部步骤的计算机程序代码指令。
或者,本公开还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或终端设备、计算设备、服务器等)的处理器执行时,使所述处理器执行根据本公开的上述方法的各个步骤的部分或全部。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本公开的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种安卓应用程序实现黑白模式的方法,其特征在于,所述方法包括:
获取安卓应用显示窗口的顶级父View容器;
配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;
通过所述顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
2.根据权利要求1所述的方法,其特征在于:
所述顶级父View容器为DecorView;
所述获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView;
所述顶级父View容器DecorView的获取是在所述安卓系统中的Activity生命周期中的setContentView完成之后。
3.根据权利要求1所述的方法,其特征在于,所述配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像包括:
配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
4.根据权利要求3所述的方法,其特征在于,所述配置所述安卓系统的颜色矩阵包括:
将所述安卓系统的颜色矩阵中表示RGB的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1。
5.根据权利要求3所述的方法,其特征在于,所述通过顶级父View容器使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式包括:
所述顶级父View容器调用setLayerType执行硬件加速绘制;
获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
6.一种安卓应用程序实现黑白模式的系统,其特征在于,包括:
获取模块,用于获取安卓应用显示窗口的顶级父View容器;
配置模块,用于配置安卓系统的颜色矩阵及画笔控件,将所述安卓应用显示的彩色图像调整为预期的灰度图像;
处理模块,用于通过所述顶级父View容器组件使用硬件加速绘制方式进行绘制,将所述安卓应用全局显示为黑白模式。
7.根据权利要求6所述的系统,其特征在于:
所述获取模块获取安卓应用显示窗口的顶级父View容器为获取安卓应用显示窗口的顶级父View容器DecorView;
所述获取模块是在所述安卓系统中的Activity生命周期中的setContentView完成之后,获取所述顶级父View容器DecorView。
8.根据权利要求6所述的系统,其特征在于,所述配置模块包括:
第一配置子模块,用于配置所述安卓系统的颜色矩阵,将所述安卓应用显示的彩色图像调整为过程灰度图像;
第二配置子模块,用于配置所述安卓系统的颜色矩阵的过滤器,为所述过程灰度图像添加灰度滤镜;
第三配置子模块,用于配置所述安卓系统的画笔控件的多项绘图参数,将添加所述灰度滤镜后的过程灰度图像调整为所述预期的灰度图像。
9.根据权利要求8所述的系统,其特征在于:
所述第一配置子模块将所述安卓系统的颜色矩阵中表示RGB的三个颜色通道对应的三组数值配置为相等,并且相加趋近于1,以将所述安卓应用显示的彩色图像调整为过程灰度图像。
10.根据权利要求8所述的系统,其特征在于,所述处理模块包括:
调用子模块,用于通过顶级父View容器调用setLayerType执行硬件加速绘制;
获取子模块,用于获取所述安卓应用在启用硬件加速后的硬件加速绘制模型;
绘制子模块,用于根据所述硬件加速绘制模型,将所述安卓应用全局显示为黑白模式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010675080.6A CN111833417A (zh) | 2020-07-14 | 2020-07-14 | 安卓应用程序实现黑白模式的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010675080.6A CN111833417A (zh) | 2020-07-14 | 2020-07-14 | 安卓应用程序实现黑白模式的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111833417A true CN111833417A (zh) | 2020-10-27 |
Family
ID=72923324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010675080.6A Pending CN111833417A (zh) | 2020-07-14 | 2020-07-14 | 安卓应用程序实现黑白模式的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111833417A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112907700A (zh) * | 2021-02-23 | 2021-06-04 | 上海哔哩哔哩科技有限公司 | 颜色填充方法及装置 |
CN113298726A (zh) * | 2021-05-14 | 2021-08-24 | 漳州万利达科技有限公司 | 一种图像显示调整方法、装置、显示设备和存储介质 |
CN113569169A (zh) * | 2021-07-29 | 2021-10-29 | 北京奇艺世纪科技有限公司 | 一种页面显示方法和装置 |
CN114237799A (zh) * | 2021-12-20 | 2022-03-25 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种页面指定区域灰度化方法及装置 |
-
2020
- 2020-07-14 CN CN202010675080.6A patent/CN111833417A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112907700A (zh) * | 2021-02-23 | 2021-06-04 | 上海哔哩哔哩科技有限公司 | 颜色填充方法及装置 |
CN113298726A (zh) * | 2021-05-14 | 2021-08-24 | 漳州万利达科技有限公司 | 一种图像显示调整方法、装置、显示设备和存储介质 |
CN113569169A (zh) * | 2021-07-29 | 2021-10-29 | 北京奇艺世纪科技有限公司 | 一种页面显示方法和装置 |
CN114237799A (zh) * | 2021-12-20 | 2022-03-25 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种页面指定区域灰度化方法及装置 |
CN114237799B (zh) * | 2021-12-20 | 2024-01-16 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种页面指定区域灰度化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111833417A (zh) | 安卓应用程序实现黑白模式的方法及系统 | |
AU2009225336B2 (en) | Method of compositing variable alpha fills supporting group opacity | |
US8384738B2 (en) | Compositing windowing system | |
AU2005202722B2 (en) | Common charting using shapes | |
JP6062438B2 (ja) | タイル単位レンダラーを用いてレイヤリングするシステムおよび方法 | |
WO2017206761A1 (zh) | 应用中图片内容的显示方法、装置及存储介质 | |
US8717391B2 (en) | User interface pipe scalers with active regions | |
CN110806847A (zh) | 一种分布式多屏幕显示方法、装置、设备及系统 | |
US10186185B2 (en) | Dynamically adjusting color characteristics of electronic content | |
CN107621951B (zh) | 一种视图层级优化的方法及装置 | |
US10127001B2 (en) | Virtualizing applications for per-monitor displaying | |
CN115391692A (zh) | 视频处理方法和装置 | |
US20100131623A1 (en) | Configuring Display Properties Of Display Units On Remote Systems | |
JP2022515709A (ja) | 画像を生成するための方法、コンピュータプログラム、及び装置 | |
CN112367295B (zh) | 插件展示方法及装置、存储介质及电子设备 | |
CN111930461B (zh) | 基于Android的移动端APP全量页面灰度化方法和装置 | |
CN114625997A (zh) | 页面渲染方法及装置、电子设备、计算机可读介质 | |
US10671412B1 (en) | Fast cloning for background processes in scripting environments | |
KR102146557B1 (ko) | 어플리케이션의 데이터를 렌더링하는 방법, 장치 및 기록매체 | |
CN108965979B (zh) | 一种安卓电视上的3d阴影生成方法 | |
CN111986282A (zh) | 一种打开HEIC格式图片的插件、FreeImage及其应用程序 | |
US9064204B1 (en) | Flexible image processing apparatus and method | |
WO2022213802A1 (zh) | 动态图形编辑方法及装置 | |
CN110109663B (zh) | 一种设置全屏的方法及相关装置 | |
CN109002361B (zh) | 数据处理方法、分配方法、电子设备、客户端和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |