CN102135876B - 不规则皮肤生成的方法及*** - Google Patents
不规则皮肤生成的方法及*** Download PDFInfo
- Publication number
- CN102135876B CN102135876B CN201010102172.1A CN201010102172A CN102135876B CN 102135876 B CN102135876 B CN 102135876B CN 201010102172 A CN201010102172 A CN 201010102172A CN 102135876 B CN102135876 B CN 102135876B
- Authority
- CN
- China
- Prior art keywords
- region
- area
- subregion
- forms
- configuration file
- 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.)
- Active
Links
Landscapes
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明涉及一种不规则皮肤生成的方法及***,该方法,包括以下步骤:获取区域描述配置文件,建立区域与窗体之间的映射关系;根据区域描述配置文件生成区域;根据生成的区域及区域与窗体之间的映射关系生成不规则皮肤。该***包括:区域生成器,获取区域描述配置文件,根据区域描述配置文件生成区域;皮肤生成模块,获取区域与窗体之间的映射关系,根据所述生成的区域及区域与窗体之间的映射关系生成不规则皮肤。上述不规则皮肤生成的方法及***,采用配置文件描述区域并生成区域,进而生成不规则皮肤,达到了不用修改代码只需配置文件就可以快速动态配置不同的不规则皮肤,且根据窗体变化重新生成新的对应区域,实现了拉伸时的不规则外观效果。
Description
【技术领域】
本发明涉及动态图像处理领域,特别涉及一种不规则皮肤生成的方法及***。
【背景技术】
目前,对于不规则皮肤的生成,一般是在程序中对特定的点阵图(Bitmap,BMP)图片进行像素遍历,将颜色值不为掩码色的像素组合成区域(Region),通过调用窗口(Windows)的应用程序接口(Application Programming Interface,简称“API”)函数SetWindowRgn将该区域设置为特定窗体的区域来达到窗体的不规则外形。
目前主要采用两种方式实现:(1)在程序中硬编码将特定图片和特定窗体映射起来,特定图片生成的区域会被设置给和它有映射关系的对应窗体。(2)在诸如扩展标记语言(eXtensible Markup Language,简称“XML”)或者初始化设置(initial,简称“INI”)等类型的配置文件中指定图片和窗体的映射关系,指定图片生成的区域被设置给和它有映射关系的对应窗体。
对于第一种实现方案,由于是在程序中对特定的BMP图片进行遍历,因此当需要做另外一套异形皮肤的时候,需要改动代码,以应付皮肤中改变的、增加的BMP图片,可配置性差。
对于第二种实现方案,由于窗口的区域是通过BMP来生成的,并且BMP的大小是固定的,因此无法实现窗口拉伸(即窗口大小改变)时的不规则外形效果,无法实现拉伸时的不规则外观。
【发明内容】
基于此,有必要提供一种不规则皮肤生成的方法,能快速地动态配置不规则皮肤,且能实现窗体拉伸时的不规则外观效果。
此外,还有必要提供一种的不规则皮肤生成的***,能快速地动态配置不规则皮肤,且能实现窗体拉伸时的不规则外观效果。
一种不规则皮肤生成的方法,包括以下步骤:
获取区域描述配置文件,建立区域与窗体之间的映射关系;
根据区域描述配置文件生成区域;
根据生成的区域及区域与窗体之间的映射关系生成不规则皮肤。
优选地,所述区域描述配置文件描述的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。
优选地,所述区域与窗体之间的映射关系通过配置文件建立。
优选地,所述生成的区域包括单一区域和/或合成区域,所述生成区域的步骤具体为:
A.设定要生成区域的大小;
B.判断该区域是否为单一区域,如果是,则执行C,如果否,则执行D;
C.根据区域描述配置文件生成单一区域;
D.根据区域描述配置文件生成合成区域;
E.返回生成的区域。
优选地,所述步骤C中生成单一区域的步骤具体为:
C1.判断该区域是否由带掩码色的图片生成,若是,执行步骤C2,否则执行步骤C6;
C2.加载该区域对应的带掩码色的图片;
C3.判断是否遍历完图片的最后一行,若是,执行步骤C4,否则,执行步骤C5。
C4.合并每一行得到的区域为要生成的区域。
C5.遍历图片一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个矩形区域,则遍历完一行后,将创建的多个矩形区域合并成一个区域,然后转入下一行,返回步骤C3;
C6.以设定要生成的区域的大小作为参数创建矩形区域。
优选地,所述步骤D中的所述合成区域包括多个子区域,所述子区域为单一子区域和/或合成子区域,所述生成合成区域的步骤具体为:
D1.判断所有子区域是否遍历完,若是,则执行D4,否则执行步骤D2;
D2.根据遍历的当前子区域在该子区域所在的父区域中的属性值确定该子区域的大小;
D3.根据遍历的当前子区域的大小递归调用步骤A~D生成当前子区域,然后转入下一个子区域,并跳转到步骤D1;
D4.根据各子区域组合方式合并各子区域为要生成的区域。
优选地,所述方法还包括:
获取窗体拉伸后的大小;
根据区域描述配置文件,获取所述窗体拉伸前所对应的区域;
根据所获取的窗体拉伸后的大小及所述窗体拉伸前对应的区域,生成与拉伸后的窗体相对应的新区域;
将生成的新区域配置给拉伸后的窗体。
一种不规则皮肤生成的***,该***包括:
区域生成器,获取区域描述配置文件,根据区域描述配置文件生成区域;
皮肤生成模块,获取区域与窗体之间的映射关系,根据所述生成的区域及区域与窗体之间的映射关系生成不规则皮肤。
优选地,所述区域描述配置文件描述的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。
优选地,所述区域与窗体之间的映射关系通过配置文件建立。
优选地,所述区域生成器包括单一区域生成模块、合成区域生成模块及判断模块;所述判断模块用于判断设定要生成的区域的类型;所述单一区域生成模块在判断模块判断要生成的区域为单一区域时则生成单一区域,所述合成区域生成模块在判断模块判断要生成的区域为合成区域时则生成合成区域。
优选地,所述单一区域生成模块进一步用于在判断到该要生成的区域为带掩码色的图片生成时加载该区域对应的带掩码色的图片;遍历图片一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个矩形区域,则遍历完一行后,将这些区域合并成一个区域,然后转入下一行遍历,直至遍历完所有的图片;合并每一行得到的区域为要生成的区域;输出生成的单一区域。
优选地,所述单一区域生成模块进一步用于在判断到该设定要生成的区域为创建矩形区域生成的区域时以设定要生成的区域大小作为参数创建矩形区域;输出生成的单一区域。
优选地,所述合成区域包括多个子区域,所述子区域为单一区域和/或合成区域,所述合成区域生成模块进一步用于遍历子区域;获取所述子区域在所在的父区域中的属性值,确定该子区域的大小并生成当前子区域,然后转入下一个子区域,直至遍历完所有子区域;获取各子区域组合方式合并各子区域为要生成的区域;输出生成的合成区域。
优选地,所述皮肤生成模块进一步获取窗体拉伸后的大小并将所述窗体拉伸后的大小传递给所述区域生成器;所述区域生成器进一步根据区域描述配置文件获取窗体拉伸前对应的区域,并根据获取的窗体拉伸后的大小生成与所述拉伸后的窗体相对应的新区域,并将所述新区域配置给拉伸后的窗体。
上述不规则皮肤生成的方法及***,采用配置文件描述区域,根据配置文件中的区域描述生成区域,并根据生成的区域及区域与窗体之间的映射关系,生成不规则皮肤,达到了不用修改代码只需配置文件就可以快速动态配置不同的不规则皮肤,且能根据窗体变化重新生成新的对应区域,实现了拉伸时的不规则外观效果。
另外,上述不规则皮肤生成的方法及***能产生多样化的外观,能很好的支持版本界面变化大的桌面客户端软件。
【附图说明】
图1为一个实施例中不规则皮肤生成的方法流程图;
图2A为一个实施例中合成区域示意图;
图2B为一个实施例中合成区域拉伸变化后的示意图;
图3为一个实施例中生成区域的方法流程图;
图4为一个实施例中生成单一区域的方法流程图;
图5为一个实施例中生成合成区域的方法流程图;
图6为一个实施例中不规则皮肤拉伸变化实现方法的流程图;
图7为一个实施例中不规则皮肤生成的***的结构示意图。
【具体实施方式】
图1为一个实施例中一种不规则皮肤生成的方法,包括以下步骤:
步骤S1,获取区域描述配置文件,建立区域与窗体之间的映射关系。
其中,区域描绘了一个显示区域,可以是任何形状,且区域边界可以是曲线和直线的结合、也可以是点和/或断线组成。区域可以由矩形、路径或矩形与路径的结合创建形成,能够被裁剪和点击测试操作。区域包括单一区域和合成区域。单一区域为:遍历一张带掩码色的位图像素生成的区域,或者是调用窗口(Windows)应用程序接口(API)创建不规则区域的函数工具(CreateRectRgn)生成的区域,或者是调用创建多边形区域的函数工具(CreatePolygonRegion)生成的区域,单一区域不可再分,具有原子性。合成区域包括多个子区域,该子区域可以为:单一子区域和/或合成子区域。多个子区域合成的方式可以为区域的交集、并集或差集等。
区域描述配置文件内存有采用配置文件对区域的描述代码,可以在不修改代码的情况下快速修改区域,达到快速切换到另一个主题的不规则皮肤的目的。区域描述配置文件描述区域的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。一实施例中,区域描述配置文件为扩展标记语言(eXtensible Markup Language,简称“XML”)配置文件、初始化(Initialization file,简称“INI”)配置文件或其他类型的配置文件。在一个实施例中,采用XML描述区域的格式如下:
<Region OID=″ID名称″Type=″区域类型″Image=″生成区域的带掩码色图片的路径″Width=″区域的宽度″Height=″区域的高度″Mode=″合并方式″Align=″区域的排列方式″>
</Region>
其中,Region OID是区域的标识码,全局唯一;Width为区域的宽度,Height为区域的高度;Type为区域类型,包括单一区域和合成区域两种类型,两种类型具体内容如下:
(1)单一区域,单一区域的值可以为Rect,表示该单一区域是一个矩形区域;单一区域的值也可以为位图(Bitmap),表示该单一区域是一个遍历带掩码色的图片生成的区域,且该单一区域的XML的区域节点有图像属性,该图像属性的值描述用于生成该区域的带掩码色图片的路径。
(2)合成区域,XML描述中该合成区域节点下有区域子节点,即合成区域包括多个子区域,该多个子区域的每个子区域可为单一区域或合成区域,若子区域为合成区域,则该子区域又包括多个子区域,如此划分。
在一实施例中,称子节点表示的区域为父节点表示的区域的子区域,父节点所表示的区域为子节点表示的区域的父区域。每个子区域在XML的区域节点有组合方式(Mode)属性,表示每个子区域在其父区域中的合并方式,该合并方式可以为并集、交集或差集等。同时,每个子区域在XML的区域节点有区域的排列方式(Align)属性,区域的排列方式属性与合成区域中子区域的布局有关,表示每个子区域处于其父区域剩下区域中的位置。区域的排列方式为Left,表示子区域处于其所在父区域剩下区域的最左边;区域的排列方式为Right,表示子区域处于其所在父区域剩下区域的最右边;区域的排列方式为Top,表示子区域处于其父区域的顶部;区域的排列方式为Bottom,表示子区域处于其父区域剩下区域的底部;区域的排列方式为LeftVStretch,表示子区域处于其所在父区域剩下区域的最左边,且高度与其所在父区域一样;区域的排列方式为RightVStretch,表示子区域处于其所在父区域剩下区域的最右边,且高度与其所在父区域一样;区域的排列方式为TopHStretch,表示子区域处于其所在父区域剩下区域的顶部,且宽度与其所在父区域一样;区域的排列方式为BottomHStretch,表示子区域处于其所在父区域剩下区域的底部,且宽度与其所在父区域一样;区域的排列方式为client,表示子区域占满其所在父区域剩下区域的全部区域。
其中,当子区域的排列方式属性为LeftVStretch,RightVStretch,TopHStretch,BottomHStretch,client时,该子区域是可支持拉伸的。当父区域大小变化时,该父区域对应的子区域会被重新生成,排列方式为LeftVStretch的子区域会被重新生成为占满父区域剩余空间的左边,占的宽度为该子区域的Width属性指定的大小,排列方式为RightVStretch的子区域会被重新生成为占满父区域剩余空间的右边,占的宽度为该子区域的Width属性指定的大小,排列方式为LeftVStretch和RightVStretch的子区域可实现窗体的垂直拉伸的不规则外观;排列方式为TopHStretch的子区域会被重新生成为占满父区域剩余空间的上侧,高度为该子区域的Height属性指定的大小,排列方式为BottomHStretch的子区域会被重新生成为占满父区域剩余空间的下侧,高度为该子区域的Height属性指定的大小,排列方式为TopHStretch和BottomHStretch的子区域可实现窗体的水平拉伸的不规则外观。排列方式为client的区域会被重新生成占满父区域剩余空间,其可以实现窗体的水平及垂直拉伸。
为了更好的说明合成区域的各子区域及子区域的拉伸变化,在一实施方式中,合成区域的XML描述具体如下:
<Region OID=″BottomRightRgn″Type=″None″Align=″Client″
AlignArea=″Right″>
<Region OID=″BottomRightLeftRgn″Type=″Bitmap″
Image=″MainWnd_BottomRight_LeftRegion.bmp″Mode=″OR″
Align=″Left″Width=″Bitmap″Height=″Bitmap″/>
<Region OID=″BottomRightRightRgn″Type=″Bitmap″
Image=″MainWnd_BottomRight_RightRegion.bmp″
Mode=″OR″Align=″Right″Width=″Bitmap″Height=″Bitmap″/>
<Region OID=″BottomRightMidRgn″Type=″Rect″Mode=″OR″
Align=″TopHStretch″Height=″61″/>
</Region>
上述描述的一个窗体区域如图2A所示,该窗体为一合成区域,包括左边框子区域10、中间框子区域20和右边框子区域30三个子区域。这三个子区域合成了这个窗体的合成区域,合成区域的唯一标识码(OID)为″BottomRightRgn″,左边框子区域10的唯一标识码(OID)为″BottomRightLeftRgn″,中间框子区域20的唯一标识码(OID)为″BottomRightMidRgn″,右边框子区域30的唯一标识码(OID)为″BottomRightRightRgn″。
其中,左边框子区域10是一个单一区域,由一张掩码位图MainWnd_BottomRight_LeftRegion.bmp生成,大小是固定不变的;中间框子区域20是单一区域,是一个矩形区域,中间框子区域20的排列方式为″TopHStretch″,则中间框子区域20的大小是可以变化的,该中间框子区域20将填满合成区域中由左边框子区域10和右边框子区域30占据后剩下的空间;右边框区域30是一个单一区域,由一张掩码位图MainWnd_BottomRight_RightRegion.bmp生成,大小是固定不变的,其中,右边框子区域30中下框区域32为掩码色区域,生成区域时,掩码色像素将被排除出生成区域外。一个实施方式中,掩码色为洋红色RGB(255,0,254)。另外,左边框子区域10、中间框子区域20和右边框子区域30的组合方式都为并集,因此,这三个子区域是以并集的方式组合成唯一标识码为BottomRightRgn的合成区域。
如图2B所示,该合成区域拉伸时,变化过程如下:左右边框子区域是固定的,该合成区域先将这两个区域需要占有的空间分配出去,中间框子区域20会根据剩余空间的大小重新生成新的中间框子区域22,占满该合成区域拉伸变化分配给左右边框子区域空间后剩余的空间。
步骤S2,根据区域描述配置文件生成区域。生成区域采用的是区域生成器接收皮肤生成模块产生的区域标识码和区域描述配置文件合成生成带有标识码的区域。生成的区域包括单一区域和/或合成区域。
如图3所示,生成的区域方法的具体流程包括以下步骤:
步骤S10,设定要生成区域的大小。根据实际的需要,设定要生成的区域的大小,记为rcClient。
步骤S20,判断该区域是否为单一区域,如果是,则执行步骤S30;如果否,则执行步骤S40。
步骤S30,生成单一区域。如图4为一实施方式中,生成单一区域的具体流程是:
步骤S301,判断该区域是否由带掩码色的图片生成,如果是,执行步骤S302,如果否,执行步骤S306。
步骤S302,加载该区域对应的带掩码色的图片。一实施例中,当判断该区域是带掩码色的图片生成,则加载该区域的带掩码色图片。
步骤S303,判断是否遍历完图片的最后一行,如果是,执行步骤S304;如果否,执行步骤S305。
步骤S304,合并每一行得到的区域为要生成的区域。
步骤S305,遍历图片一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个矩形区域,则遍历完一行后,将创建的多个矩形区域合并成一个区域,然后转入下一行遍历,返回步骤S303。一实施例中,当判断没有遍历完图片最后一行,则遍历图片一行像素,以两个相邻掩码色像素之间的不包含掩码色像素的区域大小为参数调用创建不规则区域的函数工具创建矩形区域,若一行创建多个区域,则调用合并区域函数体(CombineRgn)合并多个区域。
为了更好的说明遍历图片一行像素生成区域的过程,举例如下:若掩码色像素是采用RGB表示的颜色(255,0,255),现有一行像素,像素的颜色值是(200,200,200),(200,180,100),(100,100,5),(255,0,255),(190,100,100),(120,120,120),(240,240,240),(210,210,210),(255,0,255),(160,160,160),(150,150,150),(140,140,140)。则(200,200,200)到(100,100,5)这几个像素可以创建一个矩形区域,因为其后有一个像素值是掩码色(255,0,255),接下来的(190,100,100)到(210,210,210)这几个像素可以创建一个矩形区域,最后从(160,160,160)到(140,140,140)这几个像素可以创建一个矩形区域,再将创建的三个矩形区域合并成一个区域。
步骤S306,以设定要生成的区域的大小作为参数创建矩形区域。一实施例中,当判断设定要生成的区域不由带掩码色的图片生成时,调用创建不规则区域的函数工具以设定要生成的区域大小作为参数创建矩形区域。
步骤S40,生成合成区域。一实施例中,当判断设定区域为合成区域时,生成合成区域。如图5为一实施方式中生成合成区域的具体流程如下:
步骤S400,判断所有子区域是否遍历完,如果是,则执行步骤S403,否则执行步骤S401。一实施例中,判断所有子区域是否遍历完,可以通过判断父区域中所有子区域的节点都被遍历过。
步骤S401,根据遍历的当前子区域在该子区域所在的父区域中的属性值确定该子区域的大小。当遍历的当前子区域所在父区域还有没被遍历的子区域时,根据当前子区域在父区域中的属性值来确定该子区域的大小。
步骤S402,根据该当前子区域的大小递归调用步骤S10至S40生成当前子区域,然后转入下一个子区域,并跳转到步骤S400。步骤S403,根据各子区域组合方式合并各子区域为要生成的区域。一实施例中,当判断到所有子区域遍历完时,采用合并区域函数工具合并各子区域生成要生成的区域。
步骤S50,返回生成的区域。
步骤S3,根据生成的区域及区域与窗体之间的映射关系生成不规则皮肤。
其中,不规则皮肤的生成主要原理是以一个区域为参数对一个有背景图的窗体调用窗口应用程序接口设置窗口区域(windows api SetWindowRegion),当这个区域是不规则的时候,这个窗体显示出来也就是不规则的。在一个实施方式中,不规则皮肤的生成采用区域与窗体之间的映射关系来实现,该区域与窗体之间的映射关系采用配置文件配置。该配置文件可以为XML、初始化(INI)或其他类型的配置文件。一个实施例中,XML配置区域与窗体之间的映射关系的格式举例如下:
<ChildWindow OID=″ComMsgBox″BgType=″Color″BgColor=″#0e121a″Width=″276″Height=″125″RegionID=″ControlWindowRegion″/>
其中,唯一区域标识码的值为ControlWindowRegion,表示窗体ComMsgBox和唯一区域标识码为ControlWindowRegion的区域有映射关系。当ComMsgBox被显示之前,唯一标识码为ControlWindowRegion的区域会作为参数通过应用程序接口设置窗体函数(API SetWindowRgn)设置给窗体ComMsgBox,因此ComMsgBox显示出来的时候外形轮廓就是ControlWindowRegion这个区域的形状。
上述不规则皮肤生成的方法还包括根据应用程序窗体的变化实现不规则皮肤的拉伸,如图6为一实施方式中,皮肤拉伸变化的具体流程如下:
步骤S601,获取窗体拉伸后的大小。
步骤S602,根据区域描述配置文件,获取窗体拉伸前所对应的区域。通过区域描述配置文件中的区域的标识码属性,获取拉伸窗体所对应的区域。
步骤S603,根据所获取的窗体拉伸后的大小及窗体拉伸前对应的区域生成与拉伸后的窗体相对应的新区域。利用区域生成器根据窗体拉伸后的大小,生成与拉伸后的窗体对应的新区域。
步骤S604,将生成的新区域配置给拉伸后的窗体,即实现了不规则皮肤的拉伸。
图7为一实施方式中一种不规则皮肤生成的***结构示意图,该***包括区域生成器40和皮肤生成模块50。
区域生成器40获取区域描述配置文件,根据区域描述配置文件生成区域。区域描述配置文件描述的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。区域描述配置文件对区域的描述如上述不规则皮肤生成的方法中定义描述。
一实施例中,区域生成器40包括单一区域生成模块400、合成区域生成模块401和判断模块402。判断模块402用于判断设定要生成的区域的类型。单一区域生成模块400在判断模块402判断要生成的区域为单一区域时则根据区域描述配置文件生成单一区域。合成区域生成模块401在判断模块402判断要生成的区域为合成区域时则根据区域描述配置文件生成合成区域,所述合成区域包括多个子区域,所述子区域为单一区域和/或合成区域。
一实施方式中,单一区域生成模块400进一步用于在判断到该要生成的区域为带掩码色的图片生成时加载该区域对应的带掩码色的图片;加载该区域对应的带掩码色的图片;遍历图片一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个这样的区域,则遍历完一行后,将这些区域合并成一个区域,然后转入下一行遍历,直至遍历完所有的图片;合并每一行得到的区域为要生成的区域;输出生成的单一区域。
另一个实施方式中,单一区域生成模块400进一步用于在判断到该设定要生成的区域为创建矩形区域生成的区域时以设定要生成的区域大小作为参数创建矩形区域;输出生成的单一区域。一实施例中,单一区域生成模块400调用创建不规则区域的函数工具以设定要生成的区域大小作为参数创建矩形区域。
一个实施方式,合成区域生成模块401进一步用于遍历一子区域;获取当前子区域在所在的父区域中的属性值确定该子区域的大小并生成当前子区域,然后转入下一个子区域,直至遍历完所有子区域;获取各子区域组合方式合并各子区域为要生成的区域;输出生成的合成区域。
皮肤生成模块50用于根据生成的区域及区域与窗体之间的映射关系生成不规则皮肤。其中,不规则皮肤的生成主要原理是以一个区域为参数对一个有背景图的窗体调用窗体应用程序接口设置窗体区域(windows apiSetWindowRegion),当这个区域是不规则的时候,这个窗体显示出来也就是不规则的。在一个实施方式中,皮肤生成模块50接收生成的区域及区域与窗体之间的映射关系进行配置生成不规则皮肤。该区域与窗体之间的映射关系采用配置文件配置。该配置文件可以为XML、INI或其他类型的配置文件。一个实施例中,皮肤生成模块50采用XML配置区域与窗体的映射关系举例如下:<ChildWindow OID=″ComMsgBox″BgType=″Color″BgColor=″#0e121a″Width=″276″Height=″125″RegionID=″ControlWindowRegion″/>
其中,RegionOID的值为ControlWindowRegion,表示窗体ComMsgBox和OID为ControlWindowRegion的区域有映射关系。当ComMsgBox被显示之前,OID为ControlWindowRegion的区域会作为参数通过API SetWindowRgn被设置给窗体ComMsgBox,因此ComMsgBox显示出来的时候外形轮廓就是ControlWindowRegion这个区域的形状。
上述不规则皮肤生成的***能够用于根据应用程序窗体的变化实现不规则皮肤的拉伸,具体包括:皮肤生成模块50进一步获取窗体拉伸后的大小,并将获取的窗体拉伸后的大小传递给区域生成器40;区域生成器40进一步获取该窗体拉伸前对应的区域,并根据窗体拉伸后的大小生成与拉伸后的窗体对应的新区域并将该新区域配置给拉伸后的窗体,实现了不规则皮肤的拉伸。
一实施例中,区域生成器40根据区域描述配置文件中区域标识码,获取该窗体拉伸前所对应的区域,并根据新窗体的参数信息生成对应的新区域,将生成的新区域配置给新窗体,即实现了不规则皮肤的拉伸。
上述不规则皮肤生成的方法及***,采用配置文件描述区域生成区域,并根据生成的区域及区域与窗体之间的映射关系,生成不规则皮肤,达到了不用修改代码只需配置文件就可以快速动态配置不同的不规则皮肤,且能根据窗体变化重新生成新的对应区域,实现了拉伸时的不规则外观效果。
另外,上述不规则皮肤生成的方法及***能产生多样化的外观,能很好的支持版本界面变化大的桌面客户端软件。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (11)
1.一种生成不规则皮肤的方法,包括以下步骤:
获取区域描述配置文件,建立区域与窗体之间的映射关系,所述区域与窗体之间的映射关系通过配置文件建立,所述区域描述配置文件内存有采用配置文件对区域进行描述的代码;
根据区域描述配置文件生成区域;
根据生成的区域及区域与窗体之间的映射关系生成不规则皮肤;
获取窗体拉伸后的大小;
根据区域描述配置文件,获取所述窗体拉伸前所对应的区域;
根据所获取的窗体拉伸后的大小及所述窗体拉伸前对应的区域,生成与拉伸后的窗体相对应的新区域;
将生成的新区域配置给拉伸后的窗体。
2.根据权利要求1所述的生成不规则皮肤的方法,其特征在于,所述区域描述配置文件描述的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。
3.根据权利要求1或2所述的生成不规则皮肤的方法,其特征在于,所述生成的区域包括单一区域和/或合成区域,所述生成区域的步骤具体为:
A.设定要生成区域的大小;
B.判断该区域是否为单一区域,如果是,则执行C,如果否,则执行D;
C.根据区域描述配置文件生成单一区域;
D.根据区域描述配置文件生成合成区域;
E.返回生成的区域。
4.根据权利要求3所述的生成不规则皮肤的方法,其特征在于,所述步骤C中生成单一区域的步骤具体为:
C1.判断该区域是否由带掩码色的图片生成,若是,执行步骤C2,否则执行步骤C6;
C2.加载该区域对应的带掩码色的图片;
C3.判断是否遍历完图片的最后一行,若是,执行步骤C4,否则,执行步骤C5;
C4.合并每一行得到的区域为要生成的区域;
C5.逐行遍历图片每一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个矩形区域,则遍历完一行后,将创建的多个矩形区域合并成一个区域,然后转入下一行,返回步骤C3;
C6.以要生成的区域的大小作为参数创建矩形区域。
5.根据权利要求3所述的生成不规则皮肤的方法,其特征在于,所述步骤D中的所述合成区域包括多个子区域,所述子区域为单一子区域和/或合成子区域,所述生成合成区域的步骤具体为:
D1.判断所有子区域是否遍历完,若是,则执行D4,否则执行步骤D2;
D2.根据遍历的当前子区域在该子区域所在的父区域中的属性值确定该子区域的大小;
D3.根据遍历的当前子区域的大小递归调用步骤A至步骤D生成当前子区域,然后转入下一个子区域,并跳转到步骤D1;
D4.根据各子区域组合方式合并各子区域为要生成的区域。
6.一种生成不规则皮肤的***,其特征在于,该***包括:
区域生成器,获取区域描述配置文件,根据区域描述配置文件生成区域,所述区域描述配置文件内存有采用配置文件对区域进行描述的代码;
皮肤生成模块,获取区域与窗体之间的映射关系,根据所述生成的区域及区域与窗体之间的映射关系生成不规则皮肤,所述区域与窗体之间的映射关系通过配置文件建立;
所述皮肤生成模块进一步获取窗体拉伸后的大小并将所述窗体拉伸后的大小传递给所述区域生成器;所述区域生成器进一步根据区域描述配置文件获取窗体拉伸前对应的区域,并根据获取的窗体拉伸后的大小生成与拉伸后的窗体相对应的新区域,并将所述新区域配置给拉伸后的窗体。
7.根据权利要求6所述的生成不规则皮肤的***,其特征在于,所述区域描述配置文件描述的内容包括:区域标识码、区域类型、区域图片路径、区域的宽度、区域的高度、区域的合并方式和区域的排列方式。
8.根据权利要求6所述的生成不规则皮肤的***,其特征在于,所述区域生成器包括单一区域生成模块、合成区域生成模块及判断模块;所述判断模块用于判断要生成的区域的类型;所述单一区域生成模块在判断模块判断要生成的区域为单一区域时则生成单一区域,所述合成区域生成模块在判断模块判断要生成的区域为合成区域时则生成合成区域。
9.根据权利要求8所述的生成不规则皮肤的***,其特征在于,所述单一区域生成模块进一步用于在判断到要生成的区域由带掩码色的图片生成时,加载该区域对应的带掩码色的图片;逐行遍历图片每一行的像素,以每相邻两个掩码色像素之间不包含掩码色像素的区域大小,创建矩形区域,若一行能创建多个矩形区域,则遍历完一行后,将这些区域合并成一个区域,然后转入下一行遍历,直至遍历完所有的图片;合并每一行得到的区域为要生成的区域;输出生成的单一区域。
10.根据权利要求8所述的生成不规则皮肤的***,其特征在于,所述单一区域生成模块进一步用于在判断到要生成的区域为由创建矩形区域生成的区域时,以要生成的区域大小作为参数创建矩形区域;输出生成的单一区域。
11.根据权利要求8所述的生成不规则皮肤的***,其特征在于,所述合成区域包括多个子区域,所述子区域为单一区域和/或合成区域,所述合成区域生成模块进一步用于遍历子区域;获取所述子区域在所在的父区域中的属性值,确定该子区域的大小并生成当前子区域,然后转入下一个子区域,直至遍历完所有子区域;获取各子区域组合方式,合并各子区域为要生成的区域;输出生成的合成区域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010102172.1A CN102135876B (zh) | 2010-01-21 | 2010-01-21 | 不规则皮肤生成的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010102172.1A CN102135876B (zh) | 2010-01-21 | 2010-01-21 | 不规则皮肤生成的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102135876A CN102135876A (zh) | 2011-07-27 |
CN102135876B true CN102135876B (zh) | 2015-05-20 |
Family
ID=44295671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010102172.1A Active CN102135876B (zh) | 2010-01-21 | 2010-01-21 | 不规则皮肤生成的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102135876B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103995701B (zh) * | 2011-09-29 | 2018-03-27 | 北京奇虎科技有限公司 | 一种用户界面的拉伸控制的方法 |
CN102737394A (zh) * | 2012-06-20 | 2012-10-17 | 北京市网讯财通科技有限公司 | 一种绘制windows***软件不规则皮肤的方法 |
CN106611402B (zh) * | 2015-10-23 | 2019-06-14 | 腾讯科技(深圳)有限公司 | 图像处理方法及装置 |
CN108205534B (zh) * | 2016-12-16 | 2021-07-06 | 北京搜狗科技发展有限公司 | 一种皮肤资源展示方法、装置及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101387954A (zh) * | 2007-09-10 | 2009-03-18 | 汉王科技股份有限公司 | 实现可拉伸涂写的电子幕布的方法 |
CN101539854A (zh) * | 2008-01-24 | 2009-09-23 | 西安电子科技大学 | 一种异构软件界面集成的实现方法 |
-
2010
- 2010-01-21 CN CN201010102172.1A patent/CN102135876B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101387954A (zh) * | 2007-09-10 | 2009-03-18 | 汉王科技股份有限公司 | 实现可拉伸涂写的电子幕布的方法 |
CN101539854A (zh) * | 2008-01-24 | 2009-09-23 | 西安电子科技大学 | 一种异构软件界面集成的实现方法 |
Non-Patent Citations (1)
Title |
---|
Windows中不规则窗体的编程实现;上海伟功通信;《VC知识库文章》;20041222;第1-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102135876A (zh) | 2011-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102135876B (zh) | 不规则皮肤生成的方法及*** | |
CN106663208B (zh) | 时间显著图 | |
EP0408834B1 (en) | On screen display in a TV receiver | |
EP4184314A1 (en) | Display interface layout method and electronic device | |
CN103680470B (zh) | 大屏控制的图像显示方法及*** | |
CN100388179C (zh) | 面向像素子分量的图像的硬件加强图形加速 | |
CN104007967B (zh) | 一种基于可扩展标记语言的用户界面生成方法和装置 | |
JP3761559B1 (ja) | 画像出力方法 | |
WO2014192044A1 (ja) | 画像処理装置、画像処理システム及び画像処理方法 | |
CN105872418A (zh) | 一种在数字图像上叠加gui图层的方法及装置 | |
KR101961967B1 (ko) | 화상 처리 장치, 화상 처리 방법 및 프로그램을 기록한 기록 매체 | |
CN101668144B (zh) | 实现图像层在视频层上半透明效果的方法、装置和机顶盒 | |
CN107637075B (zh) | 立体视图处理 | |
US20160005344A1 (en) | Method and system for use in uprendering multimedia content | |
CN105261055A (zh) | 一种游戏角色换装方法、装置及终端 | |
CN102222354B (zh) | 一种图形界面的自动绘制方法及*** | |
CN107027069B (zh) | 图像数据的处理方法、装置和***、存储介质及处理器 | |
CN114153442A (zh) | 基于可视化组件的大屏可视化页面配置方法和*** | |
CN107016976A (zh) | 显示控制方法及装置和显示屏*** | |
CN103616996B (zh) | 一种显示遮盖内容的鼠标显示方法及*** | |
CN103903247A (zh) | 一种图像绘制方法及*** | |
US7095417B2 (en) | Line drawing image generating device, storage medium, and line drawing image generating method | |
CN116841658A (zh) | 界面显示方法及电子设备 | |
US8466926B2 (en) | Renderer for presenting an image frame by help of a set of displaying commands | |
US20120163720A1 (en) | Image processing apparatus and method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |