图片变色方法及装置制造方法
【专利摘要】本发明公开了一种图片变色方法,包括:对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区;获取第二调色板;根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。本发明还公开了一种图片变色装置。采用本发明实施例,能在图片变色时降低内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。
【专利说明】图片变色方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种图片变色方法及装置。
【背景技术】
[0002]在游戏领域中,常常需要对图片资源进行变色,从而达到灵活复用图片,进行不同展现的目的。针对图片资源的变色,现有技术是对整个图片的所有像素按照一定的变色算法,逐个转换。具体为:
[0003]基于调色板的图片格式的图片,经过程序解码后,可以分成调色板(图片所使用的颜色的集合)和图片索引区(图片中每个像素颜色在调色板中的索引值集合)两个部分。
[0004]假设图片的宽为W像素,高为H像素,每个像素的颜色数值占用PIXSIZE个字节;则先为所述图片分配一块大小为W*H*PIXSIZE的内存。
[0005]然后,根据所述图片的图片索引区中的像素索引,从调色板内逐一找出与所述像素索引对应的颜色,将每个像素的颜色值一一写入所述内存区域。
[0006]接着,根据变色转换函数,对所述内存区域的每个颜色值进行变色转换。
[0007]当需要绘制图片时,直接将所述内存区域中的颜色值逐像素绘制到窗口,即可在窗口上看到变色的图片。
[0008]可见,现有的变色方法需在内存中又存储一份新图片,在需要使用时再绘制出来。当变色转换函数比较复杂,或者原来图片资源较大时,这种方法的计算和内存消耗就变得相当大,以至于不适合在效率要求极高的游戏中做展示。
【发明内容】
[0009]本发明实施例提出一种图片变色方法及装置,能在图片变色时降低内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。
[0010]本发明实施例提供了一种图片变色方法,包括:
[0011]对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区;
[0012]获取第二调色板;
[0013]根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
[0014]在一个实施例中,所述获取第二调色板具体为:
[0015]将所述第一调色板中的每个颜色值复制到内存区域中;
[0016]获取变色参数;
[0017]根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。
[0018]进一步的,所述获取变色参数具体为:通过导入预先配置的外部文件来获取所述变色参数;或者,通过直接读取预先配置的内部文件来获取所述变色参数;或者,按照时间对一个参数进行即时调整而获得所述变色参数。
[0019]再进一步的,所述变色转换函数是调整色调、饱和度和强度的函数;或者,所述变色转换函数是调整对比度的函数;或者,所述变色转换函数是对RGB三色进行空间转换的函数。
[0020]在另一个实施例中,所述获取第二调色板具体为:
[0021]从预先存储的调色板文件中,选出第二调色板;
[0022]将所述第二调色板复制到内存区域中。
[0023]本发明实施例还提供了一种图片变色装置,包括:
[0024]解码模块,用于对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区;
[0025]变色模块,用于获取第二调色板;和,
[0026]绘制模块,用于根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
[0027]在一个实施例中,所述变色模块具体包括:
[0028]数据复制单元,用于将所述第一调色板中的每个颜色值复制到内存区域中;
[0029]参数获取单元,用于获取变色参数;和,
[0030]转换单元,根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。
[0031]进一步的,所述参数获取单元具体用于通过导入预先配置的外部文件来获取所述变色参数;或者,通过直接读取预先配置的内部文件来获取所述变色参数;或者,按照时间对一个参数进行即时调整而获得所述变色参数。
[0032]再进一步的,所述变色转换函数是调整色调、饱和度和强度的函数;或者,所述变色转换函数是调整对比度的函数;或者,所述变色转换函数是对RGB三色进行空间转换的函数。
[0033]在另一个实施例中,所述变色模块具体包括:
[0034]调色板选取单元,用于从预先存储的调色板文件中,选出第二调色板;和,
[0035]调色板复制单元,用于将所述第二调色板复制到内存区域中。
[0036]实施本发明实施例,具有如下有益效果:
[0037]本发明实施例提供的图片变色方法及装置,根据变色参数和变色转换函数对图片的调色板进行变色转换,获得新的调色板,将图片数据所使用的调色板替换为所述新的调色板。在绘制图片时,从所述新的调色板内逐一找出图片中每个像素索引对应的颜色,并绘制到窗口内,即可获得变色后的图片。相对于现有技术中进行图片变色时需要分配内存来存储新的图片资源,并且需要逐一对图片中的每个像素进行变色计算来说,本发明实施例进行图片变色时无需分配内存来存储新的图片资源,只需要对调色板进行变色,图片资源即能自行进行颜色变换,降低了内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。此外,变色参数可以存储为外部文件,在需要使用时才导入,能够进一步降低内存和CPU的消耗。【专利附图】
【附图说明】
[0038]图1是本发明提供的图片变色方法的一个实施例的流程示意图;
[0039]图2是本发明提供的图片资源的图片索引区的一个实施例的示意图;
[0040]图3是本发明提供的图片变色方法中获取第二调色板的一个实施例的流程示意图;
[0041]图4是本发明提供的图片变色方法中获取第二调色板的另一个实施例的流程示意图;
[0042]图5是本发明提供的图片变色装置的一个实施例的结构示意图;
[0043]图6是本发明提供的图片变色装置的变色模块的一个实施例的结构示意图;
[0044]图7是本发明提供的图片变色装置的变色模块的另一个实施例的结构示意图。
【具体实施方式】
[0045]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0046]参见图1,是本发明提供的图片变色方法的一个实施例的流程示意图。
[0047]本发明实施例提供一种图片变色方法,包括步骤SI至步骤S3,具体如下:
[0048]步骤S1:对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区。
[0049]基于调色板的图片格式的图片,经过程序解码后,可以分成第一调色板和图片索引区两个部分。其中,第一调色板是图片所使用的颜色的集合,例如,第一调色板包含256种颜色。图片索引区是图片中每个像素颜色在调色板中的索引值集合。如图2所示,是本发明提供的图片资源的图片索引区的一个实施例的示意图,图片索引区以16进制的字节表示,每个字节指代使用调色板中对应序号的颜色。
[0050]步骤S2:获取第二调色板。
[0051]如图3所示,在一个实施例中,上述步骤S2中获取第二调色板的方法具体包括步骤S21至步骤S23,如下:
[0052]步骤S21:将所述第一调色板中的每个颜色值复制到内存区域中。
[0053]步骤S22:获取变色参数。
[0054]其中,变色参数可以存储为外部文件。则,获取变色参数的方法具体为:通过导入预先配置的外部文件来获取所述变色参数。本实施例将变色参数存储为外部文件,在需要使用时才导入,能够降低内存和CPU的消耗。
[0055]或者,变色参数可以存储为内部文件。则,获取变色参数的方法具体为:通过直接读取预先配置的内部文件来获取所述变色参数。
[0056]或者,变色参数可以通过即时调用而获得。则,获取变色参数的方法具体为:按照时间对一个参数进行即时调整而获得所述变色参数。例如,表现一个画面由彩色到灰色的渐进过程,就是将一个变色参数按时间进行逐渐调整的过程。
[0057]步骤S23:根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。其中,第二调色板中的每个颜色值同样存储在所述内存区域中,替换所述内存区域中的变色前的颜色值。
[0058]在具体实施当中,变色转换函数可以是调整色调(Hue)、饱和度(Saturation)和强度(Intensity)的函数。或者,变色转换函数是调整对比度的函数。或者,变色转换函数是对RGB(红绿蓝)三色进行空间转换的函数。当然,变色转换函数还可以是其他的变色函数。
[0059]如图4所示,在另一个实施例中,上述步骤S2中获取第二调色板的方法具体包括步骤S31至步骤S32,如下:
[0060]步骤S31:从预先存储的调色板文件中,选出第二调色板。
[0061]步骤S32:将所述第二调色板复制到内存区域中。
[0062]例如,依靠外部工具(比如Photoshop)对调色板图片进行更加高级复杂的变色处理后,获得一个或者多个新的调色板,并将这些新的调色板存为文件,在对图片进行变色时,将新的调色板复制到内存区域中,使图片数据所使用的调色板替换为所述新的调色板。
[0063]步骤S3:根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
[0064]在本实施例中,获得第二调色板后,将图片数据所使用的调色板替换为所述第二调色板。在绘制图片 时,从所述第二调色板内逐一找出图片中每个像素索引对应的颜色,并绘制到窗口内,即可获得变色后的图片,并展示给用户。
[0065]本发明实施例提供的图片变色方法,只需要对图片数据所使用的调色板进行替换,图片资源即能自行进行颜色变换,能够降低内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。
[0066]为了更好地说明本发明实施例的有益效果,下面对图片变色的内存和CPU消耗进行分析。
[0067]假设图片的宽为W像素,高为H像素,其像素总数为W*H。表示一种颜色的内存消耗为N,进行一种颜色变化的CPU消耗为F。且假设该图片的调色板包含的颜色数量为P。
[0068]现有技术中进行图片变色时,由于需要分配内存来存储新的图片资源,因此内存消耗为:(W*H)*N。并且,由于需要逐一对图片中的每个像素进行变色计算,因此CPU消耗为:(W*H)*F。
[0069]采用本发明进行图片变色,由于只需要为调色板中的每个颜色分配内存,因此内存消耗为:P*N。并且,由于只需要对调色板中的颜色进行变色计算,因此CPU消耗为:P*F。
[0070]由于图片中存在着使用相同颜色的像素的可能性,显然P≤W*H,因此P*N≤(W*H)*N,P*F≤(W*H)*F。可见,相对于现有技术来说,本发明技术方案能有效的降低内存消耗和CPU消耗。而且在游戏实践中,调色板包含的颜色数量P —般为256,远远小于图片的W*H,所以优化效果也是不言而喻的。
[0071]综上所述,本发明实施例提供的图片变色方法,根据变色参数和变色转换函数对图片的调色板进行变色转换,获得新的调色板,将图片数据所使用的调色板替换为所述新的调色板。在绘制图片时,从所述新的调色板内逐一找出图片中每个像素索引对应的颜色,并绘制到窗口内,即可获得变色后的图片。相对于现有技术中进行图片变色时需要分配内存来存储新的图片资源,并且需要逐一对图片中的每个像素进行变色计算来说,本发明实施例进行图片变色时无需分配内存来存储新的图片资源,只需要对调色板进行变色,图片资源即能自行进行颜色变换,降低了内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。此外,变色参数可以存储为外部文件,在需要使用时才导入,能够进一步降低内存和CPU的消耗。
[0072]本发明实施例还提供一种图片变色装置,能够实施上述图片变色方法的所有流程。
[0073]参见图5,是本发明提供的图片变色装置的一个实施例的结构示意图。
[0074]本发明实施例提供一种图片变色装置,包括:
[0075]解码模块101,用于对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区;
[0076]变色模块102,用于获取第二调色板;和,
[0077]绘制模块103,用于根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
[0078]参见图6,是本发明提供的图片变色装置的变色模块的一个实施例的结构示意图。本发明实施例提供一种变色模块,包括:
[0079]数据复制单元201,用于将所述第一调色板中的每个颜色值复制到内存区域中;
[0080]参数获取单元202,用于获取变色参数;和,
[0081]转换单元203,根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。
[0082]在具体实施当中,参数获取单元202具体通过导入预先配置的外部文件来获取所述变色参数;或者,通过直接读取预先配置的内部文件来获取所述变色参数;或者,按照时间对一个参数进行即时调整而获得所述变色参数。
[0083]本实施例所使用的变色转换函数可以是调整色调(Hue)、饱和度(Saturation)和强度(Intensity)的函数。或者,变色转换函数是调整对比度的函数。或者,变色转换函数是对RGB(红绿蓝)三色进行空间转换的函数。当然,变色转换函数还可以是其他的变色函数。
[0084]参见图7,是本发明提供的图片变色装置的变色模块的另一个实施例的结构示意图。本发明实施例提供另一种变色模块,包括:
[0085]调色板选取单元301,用于从预先存储的调色板文件中,选出第二调色板;和,
[0086]调色板复制单元302,用于将所述第二调色板复制到内存区域中。
[0087]本发明实施例提供的图片变色装置,根据变色参数和变色转换函数对图片的调色板进行变色转换,获得新的调色板,将图片数据所使用的调色板替换为所述新的调色板。在绘制图片时,从所述新的调色板内逐一找出图片中每个像素索引对应的颜色,并绘制到窗口内,即可获得变色后的图片。相对于现有技术中进行图片变色时需要分配内存来存储新的图片资源,并且需要逐一对图片中的每个像素进行变色计算来说,本发明实施例进行图片变色时无需分配内存来存储新的图片资源,只需要对调色板进行变色,图片资源即能自行进行颜色变换,降低了内存和CPU的消耗,能在效率要求极高的游戏中实现图片资源展示。此外,变色参数可以存储为外部文件,在需要使用时才导入,能够进一步降低内存和CPU的消耗。
[0088]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对【背景技术】做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0089]以上所述是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
【权利要求】
1.一种图片变色方法,其特征在于,包括: 对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区; 获取第二调色板; 根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
2.如权利要求1所述的图片变色方法,其特征在于,所述获取第二调色板具体为: 将所述第一调色板中的每个颜色值复制到内存区域中; 获取变色参数; 根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。
3.如权利要求2所述的图片变色方法,其特征在于,所述获取变色参数具体为: 通过导入预先配置的外部文件来获取所述变色参数;或者, 通过直接读取预先配置的内部文件来获取所述变色参数;或者, 按照时间对一个参数进行即时调整而获得所述变色参数。
4.如权利要求2或3所述的图片变色方法,其特征在于,所述变色转换函数是调整色调、饱和度和强度的函数;或者,所述变色转换函数是调整对比度的函数;或者,所述变色转换函数是对RGB三色进行空间转换的函数。
5.如权利要求1所述的图片变色方法,其特征在于,所述获取第二调色板具体为: 从预先存储的调色板文件中,选出第二调色板; 将所述第二调色板复制到内存区域中。
6.一种图片变色装置,其特征在于,包括: 解码模块,用于对基于调色板格式的原始图片进行程序解码,获得第一调色板和图片索引区; 变色模块,用于获取第二调色板;和, 绘制模块,用于根据所述图片索引区中的像素索引,从所述第二调色板内逐一找出与所述像素索引对应的颜色,并将每个像素对应的颜色逐一绘制到窗口内,获得变色后的图片。
7.如权利要求6所述的图片变色装置,其特征在于,所述变色模块具体包括: 数据复制单元,用于将所述第一调色板中的每个颜色值复制到内存区域中; 参数获取单元,用于获取变色参数;和, 转换单元,根据所述变色参数和变色转换函数,对所述内存区域中的每个颜色值进行变色转换,获得第二调色板。
8.如权利要求7所述的图片变色装置,其特征在于,所述参数获取单元具体用于通过导入预先配置的外部文件来获取所述变色参数;或者, 通过直接读取预先配置的内部文件来获取所述变色参数;或者, 按照时间对一个参数进行即时调整而获得所述变色参数。
9.如权利要求7或8所述的图片变色装置,其特征在于,所述变色转换函数是调整色调、饱和度和强度的函数;或者,所述变色转换函数是调整对比度的函数;或者,所述变色转换函数是对RGB三色进行空间转换的函数。
10.如权利要求6所述的图片变色装置,其特征在于,所述参数获取单元具体包括:调色板选取单元,用于从预先存储的调色板文件中,选出第二调色板;和,调色板复制单元,用 于将所述第二调色板复制到内存区域中。
【文档编号】G06T7/40GK104021579SQ201410256476
【公开日】2014年9月3日 申请日期:2014年6月10日 优先权日:2014年6月10日
【发明者】吴国瑞, 吴海育, 万晋森 申请人:广州博冠信息科技有限公司