基于2D图像加速器实现像素叠加的方法
【技术领域】
本发明涉及视频处理技术,尤其涉及一种基于2D图像加速器实现像素叠加的方法。
【背景技术】
现在的游戏,不管是2D还是3D的,为了追求透明光影效果,通常都会使用到Alpha-Blending技术。所谓Alpha-Blending技术,是按照“Alpha”混合向量的值来混合源像素和目标像素的一种图像处理技术。Alpha混合向量一般表示了图片的透明度。两个像素的α混合:首先,把源像素和目标像素的RGB的红、绿、蓝三个颜色分量分离。然后把源像素的三个颜色分量分别乘上Alpha的值,并把目标像素的三个颜色分量分别乘上Alpha的反值。接下来把结果按对应颜色分量相加,再对最后求得的每个分量结果除以Alpha的最大值;最后把三个颜色分量重新合成为一个像素输出。
TV BOX(智能电视盒)内置android(安卓)操作系统,视频播放采用Overlay(覆盖)模式进行显示,用户界面UI对应的缓存数据最终显示在帧缓存(Frame Buffer,简称FB)上,FB覆盖在Overlay上方,即用户界面数据在视频数据的上方(如带有前进、后退和暂停键的对话框用户界面在视频的数据上方);一般智能电视盒的显示屏LCD像素点的关键色(Color Key)是设置为黑色,即黑色(0x0000)作为过滤色,这样FB上除了用户界面UI区域外的其他像素点都为黑色,这样最后的显示效果就是能透过FB的黑色区域看到视频的图像。但是当用户界面UI区域中也有像素点为黑色时,也会被过滤掉,这样用户界面的数据就显示不出来,为了使黑色的用户界面UI区域不被当做过滤色,也能显示出来,那么需要用电视盒的CPU对格式是ARGB的UI进行逐点处理,判断每个像素点的A分量,如果A分量值不等于0x00,则对像素点的B分量进行处理,A分量等于0x00的像素点是不需要显示出来的,故不作处理。这样用CPU对UI进行逐点判断和运算带来的问题是CPU耗时较多,特别在UI较大(1280*720)用CPU来处理,耗时很长需要120ms左右,相当于UI刷新只有8.3fps,这样导致TV BOX的鼠标滑动非常卡顿,滑动不顺畅,用户体验非常差。
现有技术中提供了一种“进行图像混合的处理方法和处理装置”,公开号为:CN102281381A;公开日为:2011.12.14的中国专利,其处理方法包括:通过用户接口选定第一图像格式的预定颜色的色值作为关键色色值;通过所述关键色色值计算所述预定颜色在第二图像格式中的色值,作为关键色转换值;根据所述关键色转换值,获得第二图像格式的图层中的关键色区域和非关键色区域,对所述关键色区域进行预设的图像混合运算,获得所述关键色区域的处理结果,并将所述处理结果和所述非关键色区域叠加在第一图像格式的图层上,获得图像混合结果。该发明在对不同格式的同一种颜色进行处理时,能够避免换算色值的麻烦,提高处理效率。但该发明只是针对两种不同格式的同一种颜色进行处理,不能对同种格式的不同种颜色进行处理。
【发明内容】
本发明要解决的技术问题,在于提供一种基于2D图像加速器实现像素叠加的方法。
本发明是这样实现的:基于电视盒的2D图像加速器实现像素叠加的方法,包括如下步骤:
步骤10、配置2D图像加速器的Alpha-Blending公式为Cd’=Cs+Cd*As/0xff;其中Cd’表示最后计算出新的颜色值,Cs表示源的颜色值,Cd表示目标的颜色值,As表示源的alpha值;
步骤20、配置2D图像加速器的Alpha-Blending的自动饱和功能,所述自动饱和功能为:所述公式Cs+Cd*As/0xff计算出新的颜色值Cd’>0xff时,将计算出新的颜色值Cd’置为0xff;
步骤30、电视盒的用户界面播放一帧图像时,该播放的帧图像为视频源画布;在电视盒中分配一块缓冲区buffer,所述缓冲区大小与视频源画布大小一致,在所述缓冲区中存储颜色值为0xff000008的数据,该颜色值即为目标的颜色值;
步骤40、所述视频源画布与所述分配的缓冲区buffer中颜色值为0xff000008的数据进行Alpha-Blending处理,将视频源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值,从而完成像素的叠加过程。
进一步地,所述步骤40将视频源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值具体为:将视频源画布中的每个像素的RGB的红、绿、蓝三个颜色进行分量分离,将颜色值为0xff000008的数据RGB也进行分量分离,将视频源画布的各颜色分量和对应的颜色值为0xff000008的数据RGB的颜色分量根据公式Cd’=Cs+Cd*As/0xff计算得到对应新的颜色分量,如果新的颜色分量值>0xff时,将新的颜色分量值置为0xff,最后将三个新的颜色分量重新合成一个叠加后的像素的颜色值。
进一步地,所述缓冲区buffer支持的图像格式为ARGB8888。
本发明具有如下优点:本发明在电视盒的播放视频时,视频以帧为单位,一帧可以认为是一张画布,该播放的一帧图像为源画布,在电视盒中分配一块缓冲区buffer,在所述缓冲区中存储颜色值为0xff000008的数据,所述视频源画布与所述分配的缓冲区buffer中颜色值为0xff000008的数据进行Alpha-Blending处理,将视频源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值,从而完成像素的叠加过程。本发明用2D图像加速器取代CPU对ARGB格式的用户界面UI画布逐点处理,解决了CPU开销大、鼠标滑动不顺畅的问题;且实现了无需CPU处理,即可使用户界面区域的像素点为黑色部分不会被过滤掉,能在视频上显示出来。
【附图说明】
图1为本发明方法流程示意图。
图2为本发明电视盒的用户界面播放的视频源画布的示意图。
图3为本发明电视盒中分配一块缓冲区buffer的示意图。
图4为本发明叠加后的画布的示意图。
【具体实施方式】
请参阅图1所示,基于电视盒的2D图像加速器实现像素叠加的方法,包括如下步骤:
步骤10、配置2D图像加速器的Alpha-Blending公式为Cd’=Cs+Cd*As/0xff;其中Cd’表示最后计算出新的颜色值,Cs表示源的颜色值,Cd表示目标的颜色值,As表示源的alpha值;
步骤20、配置2D图像加速器的Alpha-Blending的自动饱和功能,所述自动饱和功能为:所述公式Cs+Cd*As/0xff计算出新的颜色值Cd’>0xff时,将计算出新的颜色值Cd’置为0xff,这样避免新的颜色值溢出带来的颜色跳变的问题(如:当B分量的颜色值是0xfe,加上8后B分量的颜色值直接设置为0xff,而不是0x06);
步骤30、电视盒的用户界面播放一帧图像时,该播放的帧图像为源画布;(电视盒播放视频时,视频以帧为单位,一帧可以认为是一张画布,该播放的一帧图像为源画布)在电视盒中分配一块缓冲区buffer,所述缓冲区大小与视频源画布大小一致,支持图像格式为ARGB8888,在所述缓冲区中存储颜色值为0xff000008的数据,该颜色值即为目标的颜色值(Alpha-Blending公式中的Cd);
步骤40、所述视频源画布与所述分配的缓冲区buffer中颜色值为0xff000008的数据进行Alpha-Blending处理,将源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值,从而完成像素的叠加过程。其中将源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值具体为:将源画布中的每个像素的RGB的红、绿、蓝三个颜色进行分量分离,将颜色值为0xff000008的数据RGB也进行分量分离,将源画布的各颜色分量和对应的颜色值为0xff000008的数据RGB的颜色分量根据公式Cd’=Cs+Cd*As/0xff计算得到对应新的颜色分量,如果新的颜色分量值>0xff时,将新的颜色分量值置为0xff,最后将三个新的颜色分量重新合成一个叠加后的像素的颜色值。
下面结合一具体实施例对本发明作进一步说明。
1、配置电视盒的2D图像加速器的Alpha-Blending公式为Cd’=Cs+Cd*As/0xff;其中Cd’表示最后计算出新的颜色值,Cs表示源的颜色值,Cd表示目标的颜色值,As表示源的alpha值;
2、配置2D图像加速器的Alpha-Blending的自动饱和功能,所述自动饱和功能为:所述公式Cs+Cd*As计算出新的颜色值Cd’>0xff时,将计算出新的颜色值Cd’置为0xff;
3、如图2所示,电视盒的用户界面播放播放一帧图像时,该播放的一帧图像为源画布;该源画布的前4个像素点的ARGB颜色值分别为第一点ARGB=0xff000000,第二点ARGB=0xff7d19fa,第三点ARGB=0xff000000,第四点ARGB=0xfff4f168;如图3所示,在电视盒中分配一块缓冲区buffer,所述缓冲区大小与源画布大小一致,并支持ARGB格式,在所述缓冲区中存储颜色值为0xff000008的数据,该颜色值即为目标的颜色值;
4、将所述源画布与所述分配的缓冲区buffer中颜色值为0xff000008的数据进行Alpha-Blending处理,将源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值,从而完成像素的叠加过程。其中将源画布中的每个像素与颜色值为0xff000008的数据根据公式Cd’=Cs+Cd*As/0xff和Alpha-Blending的自动饱和功能计算出叠加后像素的颜色值具体为:将源画布中的第一像素点ARGB=0xff000000的RGB的红、绿、蓝三个颜色进行分量分离,即ARGB=0xff000000进行隔位分离A=0xff、R=0x00、G=0x00、B=0x00;将颜色值为0xff000008的数据RGB也进行分量分离,即R’=0x00、G’=0x00、B’=0x08;则根据公式Cd’=Cs+Cd*As/0xff,即红的分量Cd’=0x00(即为R)+0x00(即为R’)*0xff(即为A)/0xff=0x00;绿的分量Cd’=0x00(即为G)+0x00(即为G’)*0xff(即为A)/0xff=0x00;蓝的分量Cd’=0x00(即为B)+0x08(即为B’)*0xff(即为A)/0xff=0x08;将新的红的分量0x00,绿的分量0x00,蓝的分量0x08重新合成一个叠加后的像素的颜色值0xff000008;将源画布中的第二像素点ARGB=0xff7d19fa的RGB的红、绿、蓝三个颜色进行分量分离,即ARGB=0xff7d19fa进行隔位分离A=0xff、R=0x7d、G=0x19、B=0xfa;将颜色值为0xff000008的数据RGB也进行分量分离,即R’=0x00、G’=0x00、B’=0x08;则根据公式Cd’=Cs+Cd*As/0xff,即红的分量Cd’=0x7d(即为R)+0x00(即为R’)*0xff(即为A)/0xff=0x7d;绿的分量Cd’=0x19(即为G)+0x00(即为G’)*0xff(即为A)/0xff=0x19;蓝的分量Cd’=0xfa(即为B)+0x08(即为B’)*0xff(即为A)/0xff=0xff;将新的红的分量0x7d,绿的分量0x19,蓝的分量0xff重新合成一个叠加后的像素的颜色值0xff7d19ff;同理将源画布中的第三像素点ARGB=0xff000000,第四像素点ARGB=0xfff4f168;经过处理后得到叠加后的像素的颜色值对应为0xff000008、0xfff4f170;从而完成像素的叠加过程。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。