首页> 中国专利> 一种动态变换图素颜色的方法和变换图像颜色的方法

一种动态变换图素颜色的方法和变换图像颜色的方法

摘要

一种动态变换图素颜色的方法和变换图像颜色的方法。所述图素颜色变换方法包括:1)把图素加载到内存,包括在内存中保存图素的颜色;2)请求色彩变换时,对图素颜色在HLS模式下的色调值HUE进行调整;3)将调整后图素的颜色值由HLS模式转换为RGB模式,并进行显示。本发明该实现了对具有高质量色彩过渡图像的色彩变换,并且提高了系统处理效率,降低了系统负荷。

著录项

  • 公开/公告号CN1787010A

    专利类型发明专利

  • 公开/公告日2006-06-14

    原文格式PDF

  • 申请/专利权人 北京金山软件有限公司;

    申请/专利号CN200510126045.4

  • 发明设计人 李学武;

    申请日2005-11-24

  • 分类号G06T5/00(20060101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人逯长明

  • 地址 100083 北京市海淀区北四环中路238号柏彦大厦

  • 入库时间 2023-12-17 17:16:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-06

    未缴年费专利权终止 IPC(主分类):G06T5/00 授权公告日:20080213 终止日期:20141124 申请日:20051124

    专利权的终止

  • 2008-02-13

    授权

    授权

  • 2006-08-09

    实质审查的生效

    实质审查的生效

  • 2006-06-14

    公开

    公开

说明书

技术领域

本发明涉及计算机色彩显示技术,尤其是动态变换图素色彩的方法和动态变换图像色彩的方法。

背景技术

色彩的动态变换是指依据逻辑需要,动态对图像进行色彩变换的过程,色彩动态变换技术随着计算机多媒体应用的普及也得到了广泛的应用。以游戏为例,色彩的动态变换可以丰富玩家的造型,满足玩家造型的多样化、个性化需求,以及用于体现游戏角色属性值的变换,以满足游戏逻辑的需求。

一个图像包括至少一个图素,所述图素是图像的最小绘制单元,每个图素中的颜色统一进行变化。

现有技术中,图素色彩变换的方法为将一个图素依据颜色划分为若干区域,一个区域内像素的颜色相同,在进行颜色变换时,根据RGB颜色合成的原理生成新的颜色对各区域内原有颜色进行替换。由该方法可以看出,当某个图素中需要包括颜色过渡(即颜色产生渐变)的区域时,为了达到图素整体颜色变换时的平滑过渡,需要划分细致的区域,使得在颜色变换过程繁琐。以游戏为例,若某角色装备包括五种颜色,五种颜色的衔接部分需以过渡色进行,即衔接部分包括了一种颜色到另一种颜色之间的多个颜色,在对该角色装备进行颜色变换时,对于五种颜色的区域,可直接使用其他颜色进行覆盖,然而对于衔接部分,很难细致的划分每个过渡颜色的区域,因此往往只能对少数过渡颜色进行变换,导致了衔接部分的过渡颜色减少及区域之间明显的边缘,影响图素的美观。

由上所述,为了保证图素颜色的平滑过渡,同时为了降低色彩变换繁琐程度,现有技术中,通常用静态图像,即对一个图素需要变换的每一种颜色均作为一个图素文件保存到系统中,当需要进行图素的色彩变换时,加载相应色彩的图素文件。该方法导致了资源容量庞大。

综上所述,现有技术的缺陷在于,较难实现包括过渡色的图素的颜色变换;另一方面,如果需要在图素颜色变换中达到过渡色平滑渐变的效果,则需要划分更细致的区域进行色彩的填充;同时为了保证系统的处理速度,导致需要增加大量的图素文件保存到程序中,使得程序占用较多的资源,同时也增加了技术人员的工作量。尤其在游戏中还会给玩家带来不便。

发明内容

本发明的目的是提供一种动态变换图素颜色的方法,能够对具有高质量色彩过渡的图素进行颜色变换,且不增加系统负荷或降低色彩变换处理效率。相应的,本发明还提供了一种动态变换图像颜色的方法。

为解决上述技术问题,本发明提供了一种动态变换图素颜色的方法,包括:1)把图素加载到内存,包括在内存中保存图素的颜色;2)请求色彩变换时,对图素颜色在HLS模式下的色调值HUE进行调整;3)将调整后图素的颜色值由HLS模式转换为RGB模式,并进行显示。

优选的,将加载图素时保存的图素颜色作为基准;在请求颜色变换时,将所述基准在HLS模式下的HUE值调整一定的角度,以获得被请求的颜色。

在上述方法基础上,保存图素颜色在RGB模式下的值;以及,请求色彩变换时,将颜色RGB模式的值转换为HLS模式的值,进而进行对HUE值的调整。并且还可进一步保存色彩变换后的图素颜色;以及,若内存已满,则释放最久未使用的内存块,用以保存新生成的图素颜色。优选的,进一步记录颜色变换后图素的HUE值。

在上述方法基础上,2)中进一步包括,根据HUE值判断被请求的图素颜色是否已经被保存在内存,若是,则调用并进行图素输出,否则进行HUE值的调整。优选的,本发明采用内存池技术创建分配内存,用于保存图素颜色。以及,采用调色板格式保存图素颜色。

本发明还提供了一种采用如权利要求1所述方法的动态变换图像颜色的方法,包括:加载图像到内存中,分别保存图像中各图素的颜色;请求图像颜色变换时,分别调整图像中各图素颜色在HLS模式下的色调值HUE;将调整后图素的颜色值由HLS模式转换为RGB模式,并进行显示。

上述方法基础上,进一步包括:请求图像颜色变换时进一步包括确定所需进行颜色变换的图素,以及该些图素所需调整的色调值大小。

以上技术方案可以看出,本发明中采用了HLS模式进行色彩变换,所述HLS包括色调(HUE)、饱和度(Saturation)和亮度(Lightness)三个元素,通常情况下,修改HLS模式中的色调值,而不改变饱和度值和亮度值即可实现色彩变化;而对于RGB模式,基于RGB的原理,图素色彩在进行变换时,R、G、B三个参数以一定的比例在进行变换,该比例不容易获取,并且三个参数都在进行变换,因而在动态色彩变换中计算量大。基于上述说明,本发明中仅通过改变HLS模式下的色调值即实现了图素色彩的变换,因而提高了图素色彩变换的效率,一般情况下,由于计算机显示器的物理结构是遵循RGB模式的,因而本发明中采用了RGB模式进行显示处理。进而,由于本发明提高了图素色彩变换效率,因而使得不必在系统中预先保存各种颜色的同一图素文件,降低了系统负荷。另一方面,由于同一个图素色彩变换统一进行,同一图素中所有像素点色调值(HUE)进行相同值的增加或减少,因而本发明中不受划分区域的限制,因而,在上述有益效果基础上,本发明实现了对高质量色彩过渡图素的颜色变换。

进一步,一般情况下,由于计算机显示器的物理结构是遵循RGB模式的,因而本发明保存图像颜色时采用RGB模式;为了节省存储空间,本发明中还使用了调色板格式用于记录图素颜色。

进一步,为了进一步提高图素颜色动态变换的效率,本发明中对图素变换后的颜色进行保存,当当前请求的颜色已被保存到内存中时,则可直接进行调用;同时基于最久未使用淘汰原则保存一定数量的调色板,以控制内存占用空间。进一步,本发明中推荐使用内存池技术创建分配缓冲区用于保存图素颜色,采用内存池技术可进一步提高系统的处理效率。

本发明还提供了一种采用上述图素颜色变换方法的动态变换图像颜色的方法,相应的,该方法实现了对具有高质量色彩过渡图像的色彩变换,并且提高了系统处理效率,降低了系统负荷。

附图说明

图1为HLS色彩模式原理图;

图2为本发明实施例流程图。

具体实施方式

本发明中涉及对图像RGB色彩模式与HLS色彩模式的转换。

所述RGB模式是当前较常用的色彩合成模式,几乎所有的绘图软件及图像显示都采用了RGB模式,其优点在于处理方便,占用空间小。RGB分别代表红(R)、绿(G)、蓝(B)三种颜色,在光谱色中,这三种颜色是人眼最敏感的色彩,可以混成绝大多数色彩,反之,绝大部分色彩亦可分解为红绿蓝三色,即所谓的三原色原理。由红、绿、蓝相加混合,以取得其他颜色的颜色合成方式称为RGB色彩模式。R、G、B这三个参数的取值范围都在0至255之间,例如,(0,0,0)显示为白色,(255,255,255)显示黑色。

所述HLS模式是最接近现实习惯的一种色彩模式,较符合一般用户的色彩调整习惯。HLS由三个要素组成,即色相或色调(HUE)、亮度(Lightness)、饱和度(Saturation)。色相(色调)是色彩最基本的属性,即色彩的颜色范围,光谱中的每一种色彩都是一种色相,在红色至紫色之间,可以定义出任意数量的色相。图1所示为HLS模式原理图。图中纵坐标表示亮度(L,Lightness),横坐标表示饱和度(S,Saturation),圆弧代表色相(色调)(H,Hue),沿着圆弧转动一定角度,色彩实现均匀的变换过渡。

基于上述说明可知,对于HLS模式,修改色调值即可实现颜色的变换,即参照图1,通过调整圆弧角度即实现图像色彩的变换;而对于RGB模式,若需要色彩进行变换,R、G、B这三个参数是以一个比例在变换,这个比例较难获取,并且三个参数值均在发生变化,进而在实现过程中带来不便,因此,本发明的关键点之一在于采用HLS模式进行色彩变换,通过改变色调一个参数值,就可实现色彩的变换。

图素由像素点组成,每个像素点的颜色对应的是当前调色板的一个颜色,对一副图素进行色彩变换时,需要对这幅图素里面的所有像素点的颜色进行转换,实际上是把当前调色板中的所有颜色进行转换存为另一个调色板,并把新生成的调色板作为当前图素所使用的调色板。本发明的核心在于,在所述转换的过程中,把当前调色板中的每个颜色的RGB模式下的值转换成HLS值,HLS值通过对H值进行修改,达到变换颜色的目的;并且,为了本发明能够兼容当前多数的显示技术,因而将HLS转换成对应的RGB模式下的值,并显示。

所述HLS与RGB的转换公式如下:

1)由HLS模式向RGB模式的转换:

HLSRGB

>>MAX>=> >>>L>×>>(>1>+>S>)>>>>>>L>≤>0.5> >>>L>×>>(>1>->S>)>>+>S>>>L>>>0.5> > > >

MIN=2×L-MAX

S=0

  R=G=B=L

S≠0

  h=H+120

  h=h-360  h≥360

>>R>=> >>>MIN>+>>(>MAX>->MIN>)>>×>h>/>60>>>0>≤>h><>60> >>>MAX>>>60>≤>h><>180> >>>MIN>+>>(>MAX>->MIN>)>>×>>(>240>->h>)>>/>60>>>180>≤>h><>240> >>>MIN>>>240>≤>h><>360> > > >

h=H

>>G>=> >>>MIN>+>>(>MAX>->MIN>)>>×>h>/>60>>>0>≤>h><>60> >>>MAX>>>60>≤>h><>180> >>>MIN>+>>(>MAX>->MIN>)>>×>>(>240>->h>)>>/>60>>>180>≤>h><>240> >>>MIN>>>240>≤>h><>360> > > >

h=H-120

h=h+360  h<0

>>G>=> >>>MIN>+>>(>MAX>->MIN>)>>×>h>/>60>>>0>≤>h><>60> >>>MAX>>>60>≤>h><>180> >>>MIN>+>>(>MAX>->MIN>)>>×>>(>240>->h>)>>/>60>>>180>≤>h><>240> >>>MIN>>>240>≤>h><>360> > > >

2)由RGB模式向HLS模式的转换

RGBHLS

MAX=max(R,G,B)

MIN=min(R,G,B)

L=(MAX+MIN)/2

MAX=MIN

  S=0

  H=0

MAX≠MIN

>>S>=> >>>>(>MAX>->MIN>)>>/>>(>MAX>+>MIN>)>>>>L>≤>0.5> >>>>(>MAX>->MIN>)>>/>>(>2>->MAX>->MIN>)>>>>L>>>0.5> > > >

Cr=(MAX-R)/(MAX-MIN)

Cg=(MAX-G)/(MAX-MIN)

Cb=(MAX-B)/(MAX-MIN)

>>H>=> >>>Cb>->Cg>>>R>=>MAX> >>>2>+>Cr>->Cb>>>G>=>MAX> >>>4>+>Cg>->Cr>>>B>=>MAX> > > >

H=60×H

H=H+360  H<0

以下参照图2所示流程图,说明本发明的较佳实现方式。

初始化图素信息,包括以下步骤。

21:加载图素。该步骤可具体到:判断该图素是否已经保存在内存中,若是,则在收到图素颜色变换请求后可直接执行步骤26,若被请求图素未保存在内存中,则进一步判断当前内存剩余空间是否足够,若是则转到步骤22执行创建缓冲区的步骤,若否,则淘汰内存空间中保存的最久未使用的图素,以释放内存空间,进而执行步骤22。

22:创建缓冲区,本发明中推荐采用内存池的技术在内存中分配创建缓冲区。除内存池技术外,还可采用NEW或者malloc动态申请内存。通常,采用采用NEW或者malloc动态申请内存时,少量的操作不会造成不良影响,但是如果频繁进行申请内存块的操作,则会造成系统处理效率上的损失,更有甚者,若造成内存碎片的存在,从而进一步影响系统的效率。基于上述考虑,本发明中采用内存池技术,即一次性申请一个大点的内存块,每次需要的时候就分配一块进行使用,当该内存块不够时才去申请新的内存块。通常情况,内存池技术更加适用于每次申请固定大小的内存块的应用。本发明较佳实施例中采用内存池技术,然而并不构成对本发明采用其他内存使用技术的限制。

23:创建调色板,为了减少运算量,本实施例中使用调色板格式记录像素颜色。所述调色板以数组的形式存在,记录256种颜色,即一副图素中最多有256种颜色,每次颜色转换只需计算一个调色板内的256种颜色就可以。调色板里的每种颜色都有一个编号,以达到唯一标识的目的,每个像素点的颜色编号对应调色板里的一个编号,图素进行色彩变换时,图素当前使用的调色板的编号变化为新生成的调色板编号,但是每个像素点对应的调色板内的编号并不变,进行色彩变换时,将当前调色板里的256种颜色进行色彩变换计算,从而生成一个新的调色板并被保存。

调色板和缓冲区是随着图素存在而存在的,即只有当绘制图素时,调色板和缓冲区会在内存中被创建,若图素在下一个显示画面中不需进行绘制,则该图素所创建的调色板和缓冲区被释放。

由于人眼可明显区分的色相为7个,图素色彩在这7个色相之间进行变换,即可丰富视觉感受。因此,在本实施例中为每个图素设置7个调色板,编号从0至6用以标识。但本发明并无意限制设置调色板的数量。为了进一步减少运算量,为每个图素在内存中创建8个缓冲区,用以保存调色板,并按照最久未使用淘汰原则,保留最近使用过的8个调色板在缓冲区中。进而,多数色彩变换仅在第一次使用时包含计算过程,当再次请求变换的颜色已在缓冲区中保存时,则可直接进行调用并显示输出,使得进一步降低了系统运算量。

24:设置默认调色板,并保存到缓冲区中,由于本实施例进行色彩转换计算时,以默认调色板为基准,因此默认调色板一直保存在缓冲区中,直到该图像不再被显示。设置编号为0的调色板属性,包括偏转角度(即Hue值),最后一次使用时间、图像中每个象素点的颜色对应的调色板中颜色的值。以下为一调色板数据结构。

 struct Pal

 {

  int_last_ref_time;

  int hue;

  int palate[256];

 }

其中,intlast_ref_time为该调色板最后一次被使用的时间,用以标识该调色板是否久未使用;int hue为该调色板颜色变换时以默认调色板为基准的HUE值偏转角度,在进行颜色变换时,可根据int hue的记录判断当前请求的颜色是否已保存在缓冲区中,进而确定是否需要计算生成新的调色板或直接从缓冲区中调用;int palate[256]为该调色板数据,被图素中各像素点引用从而实现图素的绘制。

25:绘制图素,以下所示为一个图素对象的数据结构。

 class Image

 {

  Pal extPal[8];

  int width;

  int height;

  void* pImageData;

  int findPal(hue);

  int getPal(hue);

}

由该实例可知,一个图素的属性中包括了调用的调色板,调色板数组的下标为调色板编号;该图素的高度及宽度;该图素的色调值。

根据已知HUE值,请求对当前图像进行色彩转换,包括以下步骤。

26:遍历缓冲区,根据HUE值判断具有该HUE值的调色板是否被保存,若保存则进行步骤27,否则进行步骤28。

27:返回调色板编号,实现对该调色板的调用,并且,修改绘制当前图素所用调色板的编号,修改该调色板的最后使用时间为当前时间;进行步骤212,绘制图素。

28:遍历缓冲区,判断是否有空闲的缓冲区,若有则进行210,否则进行29。

29:如上文所提供调色板数据结构,根据其中最近被调用时间的属性,淘汰最久未使用的调色板,释放内存空间;由于本实施例中所进行的色彩变换均以所述默认调色板为基准,对HUE值进行调整,因而,本步骤中所述的最久未使用淘汰原则不适用默认调色板,所述默认调色板一直保存在缓冲区中,直到图素在下一个显示循环中不进行显示为止。

以下提供一实例,具体体现步骤26至步骤29的处理过程。

   int Image∷getPal(int hue)   {  int find=findPal(hue)  if(find==0)  {   int def_ref_time=0;   int found=0;   int i=0;<!-- SIPO <DP n="10"> --><dp n="d10"/>  for(i=1;i<8;i++)  {   if(extPal[i].hue==0)   {  break;   }   elseif(extPal[i]ast_ref_ime>def_ref_time)   {  def_ref_time=extPal[i].last_ref_time;  fount=i;   }  }  find=(i<8)?i:found;  convPal(extPal[0],extPal[find])   }   extPal[find].last_ref_time=time();   retum find;  }

210:以默认调色板为基准,重新计算调色板中的256个颜色值;具体的,将默认调色板中每个颜色值由RGB模式转换为HLS模式,获取HLS模式下的颜色值后,对其中的色调(HUE)值进行调整,即一定角度的增加或减少,以能获得所请求的颜色。

211:将新计算生成的调色板保存到当前缓冲区,保存到缓冲区的颜色值采用RGB模式。其中调色板颜色值RGB模式和HLS模式的相互转换方法参照上文说明,不再赘述。

212:显示输出图素。

以下示出绘制图素的实例。

void DrawImage(″name″,hue)//图素名称,颜色对应的HUE值

{

 Image& aImage=findImageByName(″name″)//根据图素名称判断是否已在内存

 int palIdx=aImage.getPal(hue)//根据色调值调用调色板

 CopyToScreen(aImage.pData,aImage.extPal[palIdx])//输出显示

}

在上文所举实施例中,设置默认调色板作为颜色变换的基准,使得色调值的调整更加灵活,颜色变换更加灵活;然而,本发明中同样可不设置所述默认调色板作为改变HUE值标准,在进行颜色变换时只要知道各调色板间HUE值之间的偏转角度,同样可实现颜色变换。如上文所述的RGB模式的优点,上述实施例在保存图素调色板颜色时采用RGB模式的值,然而,本发明并不排除在保存图素颜色时采用HLS模式值的方式,进而在显示输出图素前应将HLS模式转换为RGB模式。

本发明还提供了一种动态变换图像颜色的方法,该方法采用了本发明的动态变换图素颜色的方法。其核心在于:创建图素以构成完整图像,分别保存各图素的颜色;请求图像颜色变换时,确定所需进行颜色变换的图素,以及该些图素所需调整的色调值大小,进而分别调整图像中图素颜色在HLS模式下的色调值HUE;将调整后图素的颜色值由HLS模式转换为RGB模式,并进行显示。

在实现图像的颜色变换时,仍以图素为单位分别进行颜色变换,并采用本发明的动态变换图素颜色的方法,即包括HLS模式颜色值与RGB模式值的相互转换,对HUE值的调整的步骤;以及,还可进一步应用内存池技术创建缓冲区,采用调色板格式保存颜色数据,采用淘汰最久为使用调色板机制分配缓冲区等,具体实现步骤请参照上文的说明,不再赘述。

以上详细介绍了本发明的动态变换图素色彩的方法和动态变换图像色彩的方法,该方法尤其适用于2D游戏的图像的显示,然而,本文并不对该技术的应用领域进行限定。

以上对本发明所提供的动态变换图素色彩的方法和动态变换图像色彩的方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号