配色系统的制作方法

文档序号:7564882阅读:406来源:国知局
专利名称:配色系统的制作方法
技术领域
本发明总体涉及操作系统软件结构,具体说,是支持色彩处理的操作系统软件结构和方法。
计算机系统是信息处理系统,设计用于处理包括文本和图形在内的各种信息。这些计算机系统包括软、硬件,已越来越成熟,已经可以处理色彩信息,只是支持和处理色彩信息的能力仍然有限。例如,计算机能力受限的一个领域涉及交互和支持多种外设,这些外设在计算机控制下显示、打印、标绘色彩或把色彩展示给观众;另一受限制的领域是计算机程序员或用户在计算机系统上在自己选择的“色空间(是指把值赋予色彩以致该空间的所有色彩一致相关的系统)”中对色彩信息进行处理方面。
有关上述的一个方面更具体而言,较为普遍的外设包括计算机显示器和电视荧光屏之类的显示设备,喷墨,激光及光刻印刷之类的打印机,以及静电和转筒/平板之类的绘图仪。每种这类设备都可耦合到计算机系统或与之交互,而该计算机系统中的计算机系统硬件,操作系统软件和应用程序软件处理被显示,打印或标绘的色彩信息。
这些彩色信号处理外设至少涉及两个方面(1)它们运行的色空间,以及(2)它们的彩色的设备相关度。色空间是一个三维空间,其中的每一点都与一色彩对应。例如,RGB色空间是这样一个设备色空间,其中每点都是由红(R),绿(G),兰(B)色素的加成量形成的色彩。彩色监视器或电视屏幕通常就是在RGB色空间中操作,其中,监视器上的红、绿、兰色荧光物质发出的光被组合以显示一特定颜色。另一例子是CYMK色空间。在这个色空间里,每一点是由深兰(C),品红(M),黄色(Y)和黑色(K)的基本量组成的颜色。喷墨打印机通常在CYMK色空间中操作,其中,油墨染料被组合形成在硬考贝介质上的颜色。其他色空间与各种先有技术中已知色彩信息处理设备有关。
色彩信息处理设备相关性与每个设备本身所特有的“色域”有关。色域是在色彩空间内由给定设备的一组着色剂荧光物质,油墨或其它着色剂产生的颜色的范围。换言之,给定设备的色域构成了可由设备产生可见色彩的特定范围。例如,由一制造厂商生产的一种RGB彩色监视器与另一厂商生产的RGB彩色监视器可能有不同的色域。即使同一家厂商生产的不同型号的彩色监视器亦可有不同色域,从而使产生的颜色有设备相关性。此外,每个设备都可以有自己的色“轮廓(它是一个包括色域和七个色调再现的数据集)”,它衡量该特定设备在其色域范围内实际产生的色彩偏离理想标准多少。例如,在两个不同的彩色监视器上显示的同一红色带可能呈现不同的红色,从而导致设备相关性和色彩偏差。为了更为详细地解释本说明书将描述和图示的色彩,色空间,色域,以及其他有关色彩的原理,可参见由Fred W.Billmeyer Jr.和Max Salzman,John Wiley和Sons的《Principles of Color Technology》(1981年第二版以及由Foley等人所著并由Addison-Wesley出版公司1990年出版的《Color and the Computer》一书。
先有技术计算机系统中的色彩信息处理的一个特性与“配色”有关。计算机系统的用户可能想用打印机把出现在彩色监视器上的彩色图象制成硬考贝,也可能想把出现在打印机的硬考贝上的一个彩色图象显示到监视器上。由于这些外设操作在不同色空间并有不同色域和轮廓,所以出现在一个设备上的图象的颜色与出现在另一设备上的颜色将不一致。但是计算机系统将有一个软件操作系统结构,由它们实现配色,从而使在一个设备上出现的色彩与传送到另一设备的色彩,即使不是实际上完全一致也尽可能一致。
先有软件操作系统结构体系的色彩处理能力受到限制。其限制之一为其不能支持一给定的外设。该外设的色空间无法被修改和设计以使体系结构而得到支持。先有技术的体系结构可以支持和匹配特定外设(例如有自己的色空间,色域和轮廓特性的彩色监视器)和另一外设(例如有自己的色彩特性的特定的彩色打印机)的色彩。另一限制是当至少一种彩色监视器和打印机的色彩特性与上述特定监视器和打印机的色彩特性不同却与计算机相耦合,以及/或还有其它种类的外设(例如绘图仪或彩电摄像机)与计算机相连时,先有技术计算机系统,尤其是其操作系统结构,便将不能支持这些不同外设的配色中任何一个。
就上述的另一方面而言,计算机系统的用户可能想要工作在他们自己选择的多个色空间中,这些色空间与先有的能力有限的操作系统体系结构所支持外设的色空间不同。例如,除RGB和CYMK色空间之外的两种已知色空间是单位光亮矢量(LUV)和LUV色调,饱和和照明(HSL)色空间。但是,工作在有先有的能力有限的操作系统结构的计算机系统中的用户只能工作在监视器的RGB色空间或打印机的CYMK色空间,而非其它色空间。
本发明提供了一个独特的操作系统结构以及能支持全部范围内的色信息处理。该方法和操作系统色彩体系结构支持任意多个不同的色彩处理外设以及任意多个不同的配色处理。换言之,本发明的色彩体系结构不受任何外设制造商对其设备的色彩使用方式的束缚,而且本体系结构也不是一种配色处理方法。进一步说,由于新的色彩信息处理外设与装有本发明的体系结构的给定计算机交互,这种新设备的生产厂商可以保证该新设备与现有和系统交互的色彩信息处理外设能进行正确的通信。
操作系统色彩体系结构及方法使该体系结构的用户可在他们选择的任一色空间工作,而且该体系结构可以完全扩展,当应用程序需要或生成了新的色彩模型或空间时,就可将该色彩模型或空间加入并由该体系结构支持。同时,本发明的体系结构确保在色彩模型被加入时,可完全被集成并可使用已被加到该系统中的任意其它色彩模型。
有两种色空间存在。一种是未校准色或设备相关的而另一种则是校准色(在彩色显示技术中,以绝对值指定的色彩,例如,其值等于(1.0,10.0,0.5)的XYZ也是标准色。)或设备无关的。根据本发明的另一特性,本体系结构支持校准色和有自己色域的未校准色,而每个未校准色都知道如何将自身校准,即如何指定自己与校准色空间之间的关系。
本发明的操作系统色彩体系结构由面向目标设计所实现以便实现上述特性。面向目标设计的理论和技术为已知技术,为此可参照Grady Booch所著《Object Oriented Design with Applications》一书,该书由Banjamin/Cummings出版公司1991年出版。
根据本发明的一方面,本发明所涉及的面向目标的操作系统色彩体系结构包括一个集成色彩模块,它有一个界面层级类别(TColor)(在面向目标编程中,类别是生成目标的模式的数据结构),该类别(Class)定义一个虚拟抽象主类别以及一个储存器类别,该储存器类别包括未校准色,类别(TcolorGamut)及其它具体色彩参数,这些参数包括定义与体系结构交互的每个外设的色域的数据;以及一个类别(TcolorProfile),该类别包括定义每个外设的色调再现曲线的数据;该体系结构还包括一个输入接口软件模块用于从外设把色数据输入到集成的色模块中;以及一个输出软件接口模块,用于把经集成的色彩模块处理的色数据输出到外设。
根据本发明的另一方面,本发明所涉及的面向目标软件系统体系结构有一个衍生所有色彩类别的类别(TColor),它是一个主类别以及一个用于校准色的储存器类别;一个直接从类别(TColor)衍生下来的类别(TDevice Color),它是一个主类别和用于未校准色的储存器类别;还有至少一个校准色类别(TXYColor)直接来自类别(TColor);至少一个未校准色类别(TRGBColor)直接来自类别(TDeviceColor);还有一个包括存储至少一个外设的色域信息的样板的类别(TColorGamut);以及一个类别(TColorProfile),它包括存有至少一个外设的色轮廓信息的样板。
根据本发明的再一方面,本发明构成了一个色彩信息系统,它包括可与多个外设交互的数据处理器;以及面向目标的软件操作系统结构,该结构有至少以下特性之一(ⅰ)分别在对应的校准和未校准色空间中处理校准和未校准色;(ⅱ)将未校准色转换成校准色;(ⅲ)每种色从自身获取RGB色和XYZ色;(ⅳ)每种色彩由RGB色和XYZ色设定自身;(ⅴ)每种色彩由TColor构成自身;(ⅵ)每种色彩从TColor设定自身;(ⅶ)与了解如何通过具有可测色调再现曲线而体现自己作为一个理想设备的特性的外设交互。
还有一方面,本发明所涉及的方法构成了这样的体系结构,它从一个源色彩处理设备接收源色彩数据;调用一个类别(TColorGamut),该类别分别存有标识源色彩处理设备色域和目的色彩处理设备色域的数据;又调用一个类别(TColorProfile),该类别分别存有标识源色彩处理设备和目的色彩处理设备的色轮廓的数据;再调用一个类别(TColorMatcher),该类别存有使源色彩设备的色彩和目的色彩设备的色彩相匹配的方法功能,源色彩设备和目的色彩设备的色域数据和色轮廓数据,以使目的色彩数据与源色彩数据相匹配,并将目的色彩数据送至目的色彩处理设备。
其他有关本发明的优点和方面将结合附图和说明书予以详述。


图1是根据本发明的最佳实施例具有操作系统色彩体系结构的计算机系统框图。
图2是根据本发明最佳实施例的彩色图表,用于说明色空间和色域。
图3是几何图形,用于表示根据本发明最佳实施例的外设的一种着色剂的色调再现曲线或轮廓;
图4展示了根据本发明最佳实施例的基本软件部件的框图;
图5是根据本发明最佳实施例由面向目标编程设计实现的色彩体系结构的类别图;
图6A和6B图示了在最佳实施例中把色彩从一个色空间转移到一个或多个其它色空间;
图7A和7B示出了最佳实施例中的CIE配色功能;
图8展示了根据本发明最佳实施例中所实现的配色处理过程的框图;
图10是最佳实施例中的系统部件框图;
图11是最佳实施例中的系统部件框图;
图12A和12B示出了最佳实施例中进行配色置换的两种方法;
图13是最佳实施例中的Booch Class的图,它示出了TColorProfles、TColors以及TGImages;
图14示出了一最佳实施例中的两种色轮廓,ColorGamut和ColorProfile;
图15示出了最佳实施例中的子分类操作,它来自于分类TColorProfile,用于把色轮廓提供给另一应用程序;
图16示出了根据本发明最佳实施例中用于TColor-Matcher和三个系统预置配色分类实施的分类图;三个系统预置配色分类实施包括TColormetric-ColorMatcher,TAppearance ColorMatcher,以及TExactColorMatcher。
图1示出了一个计算机系统10,它包括一个计算机或数据处理器12,可用于与外设14中至少一个进行交互。每个外设14都是可被加入与处理器12进行交互或与该交互分离的色彩信息处理设备外设。外设14是可提供色彩信息给数据处理器12或可从数据处理器12处接收色彩信息的色彩信息处理设备的实例。例如色彩信息处理设备14可包括监视器16和18,滚筒扫描仪20,平板扫描仪22,摄像和帧取样机24,传送打印机26,滚筒/平板绘图仪28,点阵打印机30,静电绘图仪32,激光打印机34,喷墨打印机36和一个光刻印刷打印机38。虽然其中只示出一个数据处理器12,但本发明的操作系统软件体系结构也支持多个耦合在一并行式硬件结构系统上的处理器12。
与数据处理器12交互的外设14是在不同色空间内运行的真实设备,例如,监视器16和18工作在RGB色空间而打印机36工作在CYMK色空间。此外,图1示出了可与处理器12交互并在选择的色空间中操纵色彩信息的虚拟设备40。例如,虚拟设备42可在已知的色空间HLS中控制色彩,而另一虚拟设备(44未示出)可在另一已知色空间xyY中控制色彩。
每个运行在给定色空间中的外设14中可有自己的色域和色轮廓。图2和图3分别以示例方式展示了每个外设14的色彩图46和几何图48。图2的二维图46示出了色空间CS,例如监视器16和18工作的RGB色空间。但是,监视器16和18在图2中有分别不同的色域CG,例如CG16和CG18。图2中的信息被绘制在“Commission International de 1Eclairage”(CIE)色空间xyY中。虽然色域是三维目标,第三维空间Y未示出。曲线48示出了监视器16和18对于一种颜色(即红色)分别有不同的色轮廓或色调再现曲线TRC16和TRC18。这两条曲线表示每个监视器16和18在各自的色域CG16和CG18中再现红色时相对于理想值的偏差。
曲线46和48各显示色彩数据,它们被储存在与外设14交互的数据处理器12中并被本发明的操作系统色彩体系结构利用来完成的下面详述的色彩信息处理。例如,监视器16和18可由不同厂家生产,或即使由同家生产但型号不同,且两者都能运行在RGB色空间中。但是,各自可有不同的色域(CG)以及色调再现曲线(TRC)。图1所示所有外设14都有相同情况,因此,本发明的色彩操作系统体系结构可扩展以支持所有不同类型外设和虚拟设备对色彩信息进行的处理。
图4示出了操作系统软件50(显示于图1中),它包括输入界面模块52,色彩模型体系结构54以及输出界面模块56。输入界面模块52直接与外设14交互为色彩模型体系结构54提供色彩信息以处理。输出界面模块56与外设14交互以把色彩模块体系结构54处理的色彩信息输出到外设14。
图5示出了由面向目标的编程设计实现的色彩体系结构54的类别图。该类别图示出了体系结构54的逻辑设计中存在的类别及其关系。在由Booch,supra,提出的常规类别图术语中,例如TColor(框58)标识的云状物表示一个类别,它是具有皱边边界的抽象概念。另外箭头所示的其它图符指出了类别之间的继承关系,例如TXYZColor(框58A)标识的类别是从类别TColor继承而来。而TSpectral Color(框58 Aa)标识的类别从类别TXYZColor继承而来。通常,在面向目标设计中的一个类别或目标封装结构(即数据)和操作在结构上的行为(即方法功能)。
色彩体系结构54可以任意一种面向目标的编程语言写成,例如已知的Smalltalk,Ada,CLOS,C以及C++。本说明书中叙述的体系结构是以C++写成的。
以面向目标原理为基础的体系结构54有若干马上就要叙述到的通用特性。数据被抽象和封装,即表示色彩的目标或包含色彩的目标可以用有多种类型的数据格式的多种格式表示,而无需改变整个体系结构54。对目标的界面将保持不变而目标本身是抽象和独立的。在面向目标的设计中,一个界面是一个隐藏了类别或目标的结构和行为的类别或目标的外视图。
正如以下要涉及的详细叙述的,所有自色彩主类别(例如主类别TColor)衍生出的目标将具有主类别所有的特性并且相对主类别操作而言是多形的,这被称为继承,其意为任何从主类别衍生出的色彩目标继承主类别的特性并可被用作表示主类别的示例或在主类别被调用时被取代。这使得系统体系结构54可使用和表示实际无限的色空间,而无需程序员或用户准确理解数据内涵如何表示。因此,在新的色彩模型和配色法得到开发时色空间和配色就可以得到扩展,这正是体系结构54的可扩展特性。
此外,若一主类别由一样板类别表现时,上述特性得到进一步发展。在C++编程语言中,样板类别指一组共享同样特性的类别,换言之,是多个类别的类别,以下叙述几个样板类别。
作为例子,考虑一个由一般抽象类别TColor表示的目标。假设该目标的内容由四个分量部分C(深兰色),M(品红色),Y(黄色)和K(黑色)所表示。这些分量部分的大小和限定由目标掌握而使其不为用户所知晓。再如另一TColor类别目标,其分量由国家电视标准控制(NTSC)的YIQ值组成,仅又要由目标本身进行定义。YIQ是电视标准,其中Y代表亮度(Intensity),I代表同相(In Phase),而Q代表显示相位(Quantum Phase)。一种颜色可加至另一种之中(有限定的加入),或通过访问界面的方法功能使一种色彩与另一色彩匹配或将其考贝到另一色彩上,在伪码中,加入匹配或考贝这三种替换可编写如下/*These are the definitions of two different types of color classes*/class TCMYKColorpublic TColor{…//Definition for CYMK color};
Class TYIQColorpublic TColor{//Definition for YIQ color];
/*Now instantiate one of each*/TYIQColor colorYIQ(i,y,q);//set with some predefined i,y,q valuesTCMYKColor colorCMYK(c,m,y,k);//set also with some predefined valuesTXYZColor colorXYZ;//some other color object/*Add the two colors together to make a third*/colorXYZ=colorYIQ+colorCMYK;
/*convert colorCMYK to match color YIQ*/=colorYIQcolorYIQ;//the original colorCMYK is goneat this point
由于相加操作,即存在类别Color(框58)中的方法功能已由主类别TColor定义,所以上述操作是完整的且被充分定义的。该加操作可由主类别完成的方式在于首先把色彩CMYK和YIQ转换或变换成一通用和已知的校准色(在本例中为XYZ)。即采用给定的转换处理或算法(作为方法功能存于类别TColor)把色彩YIQ和CMYK分别转换成色彩XYZ。这两个XYZ分量然后被加入XYZ色空间以获得在XYZ空间合成色。若最终色是要XYZ色。则不用由给定的转换算法(例如作为方法功能存在类别(Color中)把合成色XYZ再转换成最终色并将其存在相应类别之中。
体系结构54还支持在一个色空间中的操作,例如,TXXXColor=TXXXColor12+TXXXColor2,或在两个色空间之间的操作,例如,TXXXColor=TFOOColor+TBARColor。在一个色空间中的操作由该色空间定义。在两个色空间中的操作由变换到一校准色空间(例如XYZ)定义运行在该校准色空间中尔后不再变换。
体系结构54的另一通用特性是所有色彩类别(校准的或未校准的)均来自主类别TColor(框58)。如下所述,这使得结构54可以使用在色彩上的面向目标的多形原理。多形性是这样一个概念,根据这个概念,一个名字(例如变量说明)可以代表由一个通用子类别(superclass)(例如类别TColor)联系起来的许多不同类别的目标;如此,任何由该名字代表的目标可以不同方式响应某些操作比较集。
此外,图5的类别图表示的色彩结构54实际上有两个层级。第一层级由类别Color(框58及其子类别)指示。如已指出的,类别Color既是定义虚拟抽象主类别的界面,还是一个储存器类别(该类别包含设备独立或用于把色彩变换到另一色空间并进行配色的校准色,以下将详述)。结构54的第二层级由TDeviceColor(框60及其子类别)标识的类别所示。这一类别是定义基于虚拟抽象的分类的界面和一个储存器类别(该类别用于下述的设备相关或未校准色空间)。每一类别Color(框58)或TDeviceColor(框60)都是一个抽象主类别,这些类别被编写以使其子类别加到类别结构(数据)和行为(成员功能)之中。
除了上述普遍特性外,色彩体系结构54具有下列至少之一的特殊特性1.体系结构54在相对的色空间中分别处理每一色彩,无论是校准的或未校准的色彩,例如Lab或HSL。
2.体系结构54处理变换为校准色的色彩;
3.每一色彩可从一给定未校准色(例如RGB色)和一给定校准色(例如XYZ色)中“设定”其本身。
4.每种色彩可将其本身“设定”成一给定的未校准色(例如RGB色)和一给定的校准色(例如XYZ色)。
5.每种色彩可从一种色中“设定”其本身。
6.每种色彩可用一种色彩构成其本身。
7.体系结构54可支持知道外设14可产生/纪录何种颜色(即其色域CG为何)的任意外设。
8.体系结构54可支持任何知道外设的理想程序(即其色调再现曲线(TRC)的外设。
由于每种色都在相关的色空间中进行处理,这意味着色彩被完全定义而且可变换到和变换出该空间。而且,由于所有色都会或可以被变换成校准色,所以把一种色彩从一个空间正确地变换到另一空间是可能的。但这并不意味着设备14可以生成该色彩。若源设备14(如监视器16)的色彩超出了目的设备14(例如打印机34)的色域,则须采用配色算法。若目的色域不等于或不包括在源色域中,则配色将不是互逆的。
在使用色彩体系结构54时,应该至少有一个可使所有色彩被变换到或变换出的色空间。举例来说,这个空间就是XYZ色空间,因为该空间包含所有已知的可见色彩。但是实际上,将XYZ色空间选作供所有色变换进入和变换出的色空间并不完全令人满意。另一可用的色空间是RGB色空间。这是由于使用已知算法可把几乎所有的未校准色变换进入及变换出RGB色空间。因此,从实用观点出发,体系结构54支持另一处理,即每种色彩可以由或从XYZ色空间及由或从RGB色空间设定/获取其本身。
图6A示出了体系结构54提供的变换,它把一个给定的未校准色变换成在XYZ色空间中的色。图6B图示了体系结构54把一给定校准色变换到RGB色空间的变换。如图6A所示,用已知变换算法可把在色空间1中的一个未校准色变换成为未校准色例如在RGB色空间中RGB色,然后再用已知变换算法将其变换成XYZ色空间的XYZ色。如图6B所示,用已知算法可把色空间2的校准色变换成XYZ色空间的XYZ色,然后再用已知算法将其变换成RGB色空间的RGB色。
进而,在本说明书中所用术语“未校准(uncalibrated)”色空间与不是基于CIE的色空间相关。即“未校准”涉及已知(RGB,HSV,HSL,CMY,CMYK)但未在一个CIE空间中有清楚定义的有代表性色空间,CIE空间即为校准空间(例如XYZ)。在上述未校准空间中的色彩通常取决于设备14,因为它产生该色彩或显示该色彩。例如,从一个RGB空间或设备14产生出的饱和红色可能都有值1.0,于是任何两种未校准色都可以被认为在不同色空间,即使它们可能在同一类别中。例如,若色彩A和B都是RGB色,若其来自于不同设备14,则其可能实际处于不同色空间中。本发明的体系结构自动支持这些色彩目标的处理,而无需用户使用它们以了解其来源。
现在将简述图5所示本发明的色彩操作系统体系结构的色彩类别。界面是以用C++语言的.h或标题文档展示的,其文档名与类别名一样(无词头“T”)。
类别MCollectible(框62)图5的框62所指名为Mcollectible的类别定义了所有其它类别都从此衍生的总目标类别。它是一个抽象类别,许多子类别将重新定义(即加入或修改)作为该类别(框62)说明的一部分的一些或全部方法功能。图5所示的所有色彩类别重新定义Mcollectible(Block 62)的下述方法功能,以使它们正常运行IsEqualOperator=Operator>>=StreamingOperator<<=Streaming类别TAttribute(框64)属性是表征和共享某些目标特性的通称。属性提供一种方式使色彩及其色特征被不同任务共享,并由体系结构54的所有用户汇集起来供共用。因此,类别TAttribute(框64)是一个管理共享处理的主类别,并可在或若这种共享需要时包括在体系结构54中。
类别TColorGtamut(框66)类别TColorGamut衍生自类别TAttribute并存储与数据处理器12交互的每个外设14的色域CG信息。如前所述,色域用于适当地把一个外设(如监视器16)的色彩转换成另一外设(如打印机30)的色彩。虽然色彩是由色域转换的,这并不是说该变换位肯定发生于色域之中。为确保色彩位于色域之中,可用一给定配色算法。执行该配色算法的配色方法功能包括在类别TColorProfile之中见述于以下框68。
用于校准色空间XYZ空间中的一个色域由XYZ空间中八个XYZ点定义。它们分别是深兰色,绿色,黄色,红色,品红色,兰色,黑色和白色。通常,每个外设14(彩色打印机,彩色扫描仪,彩色监视器等)都有自己的色域CG,例如图2所示,而且该色域信息应由设备生产商具体说明。类别TColorGamut(框66)存储两个构成程序,一个是例如定义苹果计算机公司(Apple Computer,lnc,Cupertino,California)生产的13寸RGB监视器的空构成程序,而另一个则是将包括色域的文档名视为其变量的文档构成程序。(一个构成程序是一种生成一个目标和/或创立其初始化状态的方法功能)类别TColorGamut(框66)包括帮助程序员写标题(称为.h文档)以存储该色域信息的样板。当把新外设14加到数据处理器12时,如下所述,其特定的色域数据可用该样板加到类别TColorGamnt中。
类别TColorProfile(框68)类别TColorProfile衍生自类别Color Gamut(框66)并存储加到处理器12的每个外设14的色轮廓数据。此外,类别TColor Profile还有一种装置可在类别TColor Matcher(框70)中“获得”一给定配色程序(Color Matcher是一种具有输出设备产生色彩的能力的信息的软件模块)的算法以执行至少一种配色算法,它采用了类别TColorGamut的色域CG信息以及类别TColorProfile的色轮廓信息。类别TColorProfile(框68)包括一个样板程序,它能帮助程序员编写标题文档并在新外设14耦合到数据处理器12时存储该色轮廓信息。来自于类别TColor Profile的类别TAppleColorProfile(框72)也展示于图5之中并将结合配色在下面予以详述。
作为例子,一个给定外设14的色轮廓包括分别用于七种色彩的七条色调再现曲线(TRCs)。它们分别是深兰色,绿色,黄色,红色,品红色,兰色和黑色。换言之,为便于解释,图3只示出了用于两个不同外设14的红色的一条TRC,而类别TColor Profile(框68)分别为每个外设存储了七条TRC。每一外设的TRCs可由外设14的生产厂商所说明的色域信息之类的TRC数据(它们相应于TRC曲线并存在类别TColorProfile中)通过实验而测定。另一例子是彩色监视器16,其中的TRCs可预置到一个称为(gamma)改正曲线的曲线之中。
类别TColorProfile(框68)还存有两个构成程序,一个是定义一给定外设14(例如苹果计算机公司生产的13(inch)RGB监视器)的色轮廓的空构成程序;而另一个则是将包括一色轮廓的文档名作为其变量的文档构成程序。
类别Color(框58)如上述,类别Color构成结构54的一个层级,而且既是定义一个虚拟抽象主类别的界面又是一个用于校准色的储存器类别。在色彩结构(54)中,一给定色可变换成一个未校准RGB色(设备相关)和/或一个校准的XYZ色(设备无关),类别Color(框58)有至少三个纯虚拟成员功能,它们是GetXYZColor(TXYZColor&aXYZ Color)
GetRGBColor(RGBColor&aRGB Color)constSetColor(const TColor&aColor)这些成员功能保证所有自类别Color衍生出的色彩类别将支持根据面向目标设计原理的这一功能性。而且,类别Color具有给定色的部件的字段。XYZ色的字段部件是Tristimlus Coord类型,它可具有浮点所具有的全部值。RGB色的字段部件有Intensity类型,是从0.0到1.0之间的范围。此外,类别Color可以有一不透明字段,其中,不透明值1.0意味着色彩是纯粹不透明的而不透明值0.0意味着色彩是透明的。
类别TXYZ Color(框58A)类别TXYZ Color(框58A)衍生自类别Color(框58),从类别Color(框58)衍生出的每一色彩根据本发明以下将叙述的体系结构都能将其自身转换或变换到校准的XYZ色。
类别TSpectralColor(框58Aa)类别TSpectralColor(框58Aa)衍生自类别TXYZ Color(框58A)。该类别存储使用已知的三个由图7所示的积分式(1)、(2)和(3)表达的配色函数的方法功能。在这些表达式中,XXX是被配的色彩的光谱能分布而X(u)、Y(u)和Z(u)则是实验确定的配色函数。这些函数定义了上文引用参考材料中叙述的视图的一个两度字段的CIE 1931 Standard Calorinetric Observer的配色特性。因此,类别TSpectral Color的CIE配色成功能作为加权函数使用以从光谱能量数据中获得XYZ原色。如图7中所示从光谱信息中计算XYZ的例子。类别TSpectralColor把图7所示的三个CIE配色光谱能量曲线X、Y、Z作为由该类别的空构成程序初始化的静态排列存储起来。
类别TLabColor(框58B)类别TLabColor来自于类别Color(框58)。TLabColor是一个定义一个均匀三色设备的校准色空间的类别。该色空间之值也已由CIE国际标准化了。在一均匀色彩图中有一两维坐标(a,b)。L是心理测验光亮。类别TLabColor用感性线性方式和两色之间的感性距离来表达色彩。该类别有三个静态字段,用于定义参照白色。参照白色可用于把TLabColor(框58B)的成员功能执行相关的亮度,色度,饱和度以及色差。类别TLuvColor变换成TXYZColor。系统预置是参照白色。
类别TLuvColor(框58c)。
类别TLuvColor衍生自类别Color(框58)。该类别也是一个定义均匀三色设备校准色空间的类别。该空间的值已由CIE国际标准化。在一均匀色彩图上有一两维坐标(u和v)。L是心理测验光亮。TLuvColor类别用感性线性方式表达色彩而且两色之间的感性距离与两色之间的几何距离成比例。TLuvColor(框58C)有三个静态字段,用于定义参照白色。该参照白色可用于把TLuvColor变换成TXYZColor。系统预置为参照白色。类别TLuvColor的成员函数执行相关的亮度,色度,饱和度,以及色差。
工业色彩测量仪之类的外设14采用CIE色彩系统(校准系统)。该系统使色彩由光源、目标、及观察者以一种与输入和输出设备都无关的方式指定。因此,按用户要求,体系结构54将把三色值XYZ(它们单值定义一种色彩)变换成色彩Lab坐标或色彩LUV坐标。Lab坐标可用于由反射光所检查的设备14;而Luv坐标可用于光源之类的自照明外设。
类别TxyYColor(框58D)类别TxyYColor(框58D)衍生自类别Color(框58)。色空间xyY可来自类别TXYZColor(框58A)的色空间XYZ。对于在空间XYZ和xyY之间的变换说明见下文。对于色变换及其基础算法的详细讨论可参见《Color ScienceConcepts and Methods,Quantitative Data and Formulae》该书由Wyszecki等人所著,John Wiley and Sons在1982年出版。
将XYZ变换为xyY(X)/(x=x+y+z) , (YZ)/(y=x+y+z) ,将xyY变换成XYZYYx=x y,Y=Y,Z=(1-x-y)y类别TDeviceColor(框60)该类别来自类别Color(框58)。如上所述,它构成两级结构54的另一层级。类别TDeviceColor既是一个定义虚拟抽象主类别的界面,又是在结构54未校准色的储存器类别。它包括一个对类别TColorGamut(框66)的构成引用。该类别有至少三个纯虚拟成员函数使所有设备相关或未校准色都既能转换或变换成类别TRGBColor(框60A)中的未校准RGB色又能转换或变换成类别TXYZColor(框60A)中的校准XYZ色,这些成员函数是GetXYZColor(TXYZColor&aXYZColor)GetRGBColor(RGBColor&aRGBColor)constSetColor(constTColor&aColor)这些成员函数确保来自TDeviceColor的所有色彩类别都将支持这一功能性。如前所述,为进行变换,取决于定义相关色被的特定设备14的色域CG应为所知并存储在类别TColor Gamnt(框68)之中。
类别TRGBColor(框60A)该类别来自类别TDeviceColor(框60)且定义了基于笛卡儿坐标的红、绿、兰的色模型,原色可相加并用于大部分彩色监视器和彩色光栅图形系统。三种RGB原色之值应限于0.0至1.0范围。所提供的该类别的成员函数把RGB原色限制于该范围之中。RGB色空间是未校准的;因此RGB色必须相对具体外设14并通过其色域而定义。
类别TCMYKColor(框60B)
该类别衍生自类别TDeviceColor(框60)。它定义了深兰色(C)、品红色(M)、蓝色(Y)和黑色(K)的色空间。这些色是用于打印机36之类的大部分硬考贝设备的相减合成基色。CMYK值通过首先确定的色彩中的CMYK值再计算。色彩中的黑色量是由关系式K=minimum(CX,M,Y)所决定。于是K就从CMYK值中被减去以定义该CMYK值。这一技术在色彩去除时被调用,它使硬考贝彩色设备通过打印四种而非三色彩来提高输出质量。四原色CYMK的值被限制于0.0原色1.0的范围。类别TCMYKColor包括将CMYK原色限制在该范围的成员函数。由于CMYK色彩模型是未校准的,CMYK色就得相对如打印机36之类的具体彩色设备14的色域CG而定义。
类别THSLColor(框60C)类别THSLColor衍生自类别TDeviceColor(框60)并定义已知色彩模型HSL。色调(H),亮度(L)及饱和度(S)色彩模型由在上述三维空间中的双六光束(double-hexcone)所限定。色调由围绕L轴的角度测量。红色发生在H=0.0时,沿逆时针方向的横向围边提供红色,黄色,绿色,深兰色,兰色和品红色。把180度加到H值上即可获得一个色彩补数。饱和度是从垂直轴沿径向测量的,其范围是从0.0到1.0。光亮则从0为黑色(双六光束的底)到1.0(双六光束之顶)。该HSL色彩模型是未校准色空间,因此HSL是由一特定彩色外设14通过存储于类别Color Gamut(框66)中的色域而定义的。
类别TGrayColor(框60E)该类别自TDeviceColor(框60)中衍生,定义灰度级模型,其中,灰度值可限于0.0基色1.0的范围。该类别包括把灰度级钳制于上述范围的成员函数。灰度级色彩模型是未校准的,因此其是相对于一特定彩色外设14的色域而定义的。
加入新的色彩类别作为体系结构54的扩展性部分,可在开发新色彩提型时将其它色彩类别加入。例如,假设开发了一个新的校准色空间ABC。为在该校准色空间ABC中表示一个色,可把一个新的色彩类别TNewCalColor(例如TABColor),(由图5中的虚线所示)定义为衍生并继承于类别Color(框58)。该新类别TNew Cal Color的成员函数即可由程序员作为类别定义的部分编写,以便把色ABC变换到XYZ色空间以及把色ABC从XYZ色空间变换出来。同样,可把色ABC变换到和变换出由类别Color提供的其它色空间。
作为一个特例,Tektronix公司(Beaverton,Oregon)已开发出一种校准色空间HVC以及把该空间转换成其它空间的方法。通过定义一个衍生自类别Color(这种公开的转换或变换被提供作为该类别定义的一部分)的类别THVCCdop(未示出),而扩展结构54,便可很容易地提供了这一HVC色空间色变换由加到结构54的校准色空间来定义,但它作为Color的主类别目标又与结构54的其余部分交互。以类似方式,新开发的未校准色彩类别可通过定义一个类别TNewDeviceColor(这种公开的转换或变换被提供了这一HVC色空间色变换由加到结构54的其余部分交互。以类似方式,开发的新的未校准色彩类别可通过定义一个类别TNew Device Color(在图5中由虚线所示)的方式而加入。该类别TNewDeviceColor衍生于并继承于类别TDeviceColor(框60)。
现在将更加详细地阐述图5中所示的类别Color(框58)和类别(框60A)中的方法函数。
类别Color(框58)Gets(获得)IntensityGetOpacity();
只是返回不透明字段的值。
GetXYZColor(TXYZColor&aXYZColor)=0;
每个子类别可置换该方法函数,每个子类别应知道如何为其自己获得XYZColor。
GetRGBColor(TRGBColor&aRGBColor)GetLuvColor(TLuvColor&aLuvColor)GetLabColor(TLabColor&aLabColor)GetGrayColor(TGrayColor&aGrayColor)GetCMYKColor(TCMYKColor&aCMYKColor)GetHLSColor(THLSColor&aHLSColor)GetxyYColor(TxyYColor&axyYColor)
GetHSVColor(THSVColor&aHSVColor)GetYIQColor(TYIQColor&aYIQColor)GetDEV3Color(TDEV3Color&aDEV3Color)GetCALColor(TCALColor&aCALColor)这些方法函数存储在类别Color(框58)中以提高效率,子类别可任意置换这些方法功能。每个衍生自类别Color的色空间子类别应该在自己的类别中置换方法函数。例如,类别THSVColor(框58D)应置换存储于类别Color中的GetHSVColor,以便避免对校准的XYZ的中间转换,从而节省转换时间。
GetTransformedColor(Tcolor&aColor)const;
该方法函数总是由中间转换到XYZ色空间获得的。因此,只要色彩在同样色空间(例如RGB)中,但有不同色域CG,该方法函数都应该为使用。
Returns(返回)TRGBColorReturnRGBColor()const;
TLuvColorReturnLuvColor()const;
TLabColorReturnLabColor()const;
TGrayColorReturnGrayColor()const;
TCMYKColorReturnCMYKColor()const;
THLSColorReturnHLSColor()const;
TxyYColorReturnxyYColor()const;
THSVColorReturnHSVColor()const;
TYIQColorReturnYIQColor()const;
TDEV3ColorReturnDEV3Color()const;
TCALColorReturnCALColor()const;
这些方法函数存储于类别Color中以提高效率,但子类别可对其中任意一个进行置换。每个衍生自类别Color的色空间子类别可在自己的类别中置换这些方法函数。例如,类别THSVColor(框60D)可在类别Color(框58)中置换方法函数ReturmHSVColor,以避免对于XYZ的中间转换。
Index(索引)longFindListIndex(TColorList&colors)const;
该方法函数在色表中能找出最相近的配色。子类别可置换该方法函数以实施采用Color子类别的特定种类的TColorList方法。
Sets(设置)SetOpacity(GIntensity opacity);
Sets the opacity.
ClampOpacity();
Pins the Opacity to 0.0-1.0SetWithXYZColor(const TXYColor&aXYZColor)=0;
每个子类别都可置换该方法函数。因为每个子类别都知道如何由一个XYZColor来设定其本身。
SetColor(const TColor& aColor);
该方法函数用于多形性。每一色彩应能用一个Color多形地“设置”其本身。当置换SetColor时,用户同一个色彩获取其对等的XYZ,然后将其转换成自己的格式(它已知如何进行),并对自身数据字段进行设定。
SetWithRGBColor(const TRGBColor& aRGBColor);
SetWithLuvColor(const TLuvColor& aLuvColor);
SetWithLabColor(const TLabColor& aLabColor);
SetWithGrayColor(const TGrayColor& aGrayColor);
SetWithCMYKColor(const TCMYKColor& aCMYKColor);
SetWithHLSColor(const THLSColor& aHLSColor);
SetWithxyYColor(const TxyYColor& axyYColor);
SetWithHSVColor(const THSVColor& aHSVColor);
SetWith YIQColor(const TYIQColor& aYIQColor);
SetWithDEV3Color(const TDEV3Color& aDEV3Color);
SetWithCALColor(const TCALColor& aCALColor);
为提高效率,类别Color的子类别可任意置换它们。例如,THLSColor(框60C)可置换SetWithHLSColor以避免到色XYZ的中间变换。
TRGBColor类别(框60A)该类别表示一个存储下述方法函数的典型设备相关色类别。
Constructors(构成程序)以下叙述类别构成程序。在码实施体系结构54中调用该类别时,它们生成TRGBColor目标的新例证。
TRGBColor()该构成程序为一空构成程序。“空”的意思是指它无需自变量即可生成RGB色,它有两个衍生物。在该色彩中的所有字段设置都为零。fRed=fGreen=fBlue,且fOpacity=1.0;且所用色域CG也是空的(参见在类别TColorGamut叙述中的构成程序)。
TRGBColor(TColor&aColor)TRGBColor(TDeviceColor&aDeviceColor)这些构成程序允许从任意校准色(如LabColor或任意未校准的TDeviceColor)中生成多形的RGBColor。如果构成中使用了一个未校准色,则RGBVColor使其自己的字段(fRed…fOpacity)从一aDeviceColor空间(例如外设16的色空间)变换到RGB色空间。该RGBColor继承aDeviceColor的色域CG。另一方面,如果构成中使用了诸如Lab之类的Color,则RGBColor结束于上述的变换的字段而空色域被分配给该新的色彩。这些构成程序也用于以下类型aRGBColor=(TRGBCOLOR)SomeOtherColorSpace.
TRGBColor(TRGBColor& aRGBColor)由于它从aRGBColor中生成一个新的RGBColor目标,该构成程序是一复制构成程序。生成的目标具有与aRGBColor相同的字段和色域CG。
TRGBColor(TColorGamut* the DeviceColorGamut)在新色彩中的所有字段被设置如下fRed=fGreen=fBlue=0,fOpacity=1.0而色域CG被设定为DeviceColorGamut.
TRGBColor(Red,Green,Blue,opacity=1.0);
在新色彩中的所有字段设置如下fRed=Red,fGreen=Green,fBlue=Blue.若什么都不提供,不透明度设定为1.0,或者其被设置为所提供的值。色域CG被设定为空色域。
TRGBC(TColorGamut*DeviceColorGamut,Red,Green,Blur,opacity=1.0);
在该新色彩中的所有字段设置如下fRed=Red,FGreen=Green,FBlue=Blue.不透明度在什么都不提供时为1.0,相反则被设置成所提供的值。色域设定为DeviceColorGamut.
Gets(获取)GetXYZColor(TXYZColor & aXYZColor);
GetRGBColor(TRGBColor & aRGBColor);
GetGrayColor(TGrayColor & aGrayColor);
顾名思义,一次获取(get)就是从色彩目标中获取特定的色彩目标。例如,成员函数GetXYZColor对RGBColor目标做必要的变换以返回aXYZColor。
GetComponents(Red,Green,Blue,opacity);
GetAll(Red,Green,Blue,opacity,theColorGamut);
GetClampedComponents(Red,Green,Blue,opacity);
GIntensity GetRed();
GIntensity GetGreen();
GIntensity GetBlue();
GetComponents只从目标中读出部件值并将它们返回变量Red,Green,Blue及不透明度之中。
Returns(返回)TRGBColorReturnRGBColor();
该RetumRGBColor返回RGBColor目标,字段,以及色域的确切复制。
Sets(设置)SetWithXYZColor(TXYZColor& aXYZColor);
SetWithRGBColor(TRGBColor& aRGBColor);
SetWithGrayColor(TGrayColor& aGrayColor);
每次SetWith,顾名思义,将来自特定色目标的RGB色目标进行设置。例如,成员函数SetWithXYZColor做必要的变换以便从XYZColor中获得RGBColor,并用该色彩设置RGBColor值。色域只在特定情况下才被设置成空域。
SetAll(TColorGamut*theDeviceColorGamut,Red,Green,Blue,opacity=1.0);
SetComponents(Red,Green,Blue,opacity=1.0);
SetRed(GIntensity Red);
SetGreen(GIntensity Green);
SetBlue(GIntensity Blue);
这些是简单设置。通过的值被用于设置目标值。
SetColor(TColor&*aColor);
定义SetColor以使RGBColors可被设置成对任意种类色彩而言是多形的。
RGBColor Mathoperator<=(TRGBColor&Colorl,TRGBColor&Color2)
operator<(TRGBColor&Color1,TRGBColor&Color2);
operator>(TRGBColor&Color1,TRGBColor&Color2);
operator>=(TRGBColor&Color1,TRGBColor&Color2);
operator!=(TRGBColor&Color1,TRGBColor&Color2);
friend TRGBColor operator+(TRGBColor&Color,TRGBColor&Color2);
friend TRGBColor operator-(TRGBColor&Color1,TRGBColor&Color2);
friend TRGBColor operator*(TRGBColor&Color1,float aScalar);
friend TRGBColor operator/(TRGBColor&Color1,float aScalar);
friend TRGBColor operator*(float aScalar,TRGBColor&Color1);
friend TRGBColor operator/(float aScalar,TRGBColor&Colorl);
TRGBColor& operator+=(TristimulusCoord aScalar);
TRGBColor& operator-=(TristimulusCoord aScalar);
TRGBColor& operator*=(float aScalar);
TRGBColor& operator/=(float aScalar);
TRGBColor& operator=(TRGBColor& Source);
这些方法函数置换C++中的标准操作员程序,以致它们为RGB色彩得到正确的定义。逻辑操作程序如果且仅仅如果条件适用于包括不透明度的Color1和Color2的每个字段部件时才返回一个TRUE。其余操作程序在每个独立的字段部件(不透明度除外)上执行规定的数学函数。
用色彩工作的例子这部分包括一些利用体系结构54使用色彩的例子,给出的大部分例子使用设备相关(未校准色)的RGBColor或设备独立(校准色)的XYZColor。如前所述,NullGamut和NullProfile可被定义为苹果计算机公司生产的13寸彩显的色域和色轮廓。
friend TRGBColor operator -=(TristimulusCoordaScalar);
如上文所指出的,RGBColor的字段部件RGB属于GIntensity类型,即一个在0.0和1.0之间的范围。但是,该限制无需强制实施。所以说在色彩变换期间,尤其是具有不同色域的色彩时,字段部件值处于该范围之外的情况是有可能遇见的。
制成色彩的例子以下有六个构成程序的例子,若调用,则目标的状态被给出如下(1)TRGBColor aRGBColor;
StatefRed=fGreen=fBlue=0.0;
fOpacity=1.0;
fColorGamut=NullGamut;
(2)TRGBColor(0.5,0.7,0.3,0.5);
StatefRed=0.5;fGreen=0.7;fBlue=0.3;
fColorGamut=NullGamut;
(3)TRGBColor(theDeviceColorGamut,Red,Green,Blue);
StatefRed=Red;fGreen=Green;fBlue=Blue;
fOpacity=1.0(set by default);
fColorGamut=theDeviceColorGamut;
(4)TRGBColor aRGBColor(aRGBColor);
StatefRed=aRGBColor.fRed;
fGreen=aRGBColor.fGreen;
fBlue=aRGBColor.fBlue;
fOpacity=aRGBColor.fOpacity;
fColorGamut=aRGBColor->fColorGamut;
(5)TRGBColor aRGBColor(theDeviceColorGamut);
StatefRed=fGreen=fBlue=0.0;
fOpacity=1.0;
fColorGamut=theDeviceColorGamut;
(6)TRGBColor aRGBColor(aDeviceColor);
以下等效处理发生于该构成之中。由于这是一个设备相关色,所以有其色域CG。此外,所有色彩都知道如何从其本身获取一个RGB色。
Thus,TRGBColor a TempRGBColor;
aDeviceColor.GetRGBColor(aTempRGBColor);
StatefRed=aTampRGBColor.fRed;
fGreen=aTempRGBColor.fGreen;
fBlue=aTempRGBColor.fBlue;
fOpacity=aDeviceColor->fColorGamut;
设置和获取的例子本部分说明如何使用某些设置和获取与色彩工作。在下列例子中,下列色彩被定义成TXYZColor aXYZColor(20,80,90);
TRGBColor aRGBColor1(1.0,0.0,0),aRGBColor2(0.0,1.0,0.0)TRGBColor aRGBColorGamut2(<GHT-ColorGamut);
用一个RGBColor设置一个XYZColoraXYZColor.SetWithRGBColor(aRGBColorl);
该aXYZColor现在有修正的XYZ值,以一个NullGamut来对应aRGBColor。若现在执行以下各函数aXYZColor.GetRGBColor(aRGBColor2);
则aRGB2的状态为fRed=1.0;
fGreen=0.0;
fBlue=0.0;
fOpacity=1.0;
fColorGamut=NullGamut;
若下列被执行从另一RGBColor中获取RGBColor若执行下述aRGBColor.Get GBColor(RGBColor Gamut2)则aRGBColorGamut2的状态为fRed=1.0;
fGreen=0.0;
fBlue=0.0;
fOpacity=1.0;
fColorGamut=NullGamut;
把简单数学运用于色彩的例子在结构54中的所有色类别都有一个为它们定义的简单数学集。在下例中,定义了下列XYZColorTXYZColor aXYZColor1(0.2,0.1,0.3);
TXYZColor aXYZColor2(0.3,0.2,0.2,1.0);
TXYXColor aXYXColor3;
对逻辑操作而言,色彩的每个独立字段必须满足被评价为TRUE的表达式的逻辑条件,因此,aXYZColor1<=aXYZColor2 would yield TRUEaXYZColor1<aXYZColor2 would yield TRUEaXYZColor1>aXYZColor2 would yield FALSE
aXYZColor3=aXYZColor1+aXYZColor2;
若aXYZColor3在求和操作前为fX=0.0fY=0.0fZ=0.0fOpacity=1.0;
在求和操作后aXYZColor3将为fX=0.5fY=0.3fZ=0.3;
fOpacity=1.0;
该色彩的不透明度不进入数学计算aXYZColor3=aXYZColor1-aXYZColor2;
若在减操作前aXYZColor3为fX=0.0fY=0.0fZ=0.0;
fOpacity 1.0;
在减操作后的aXYZColor3将为fX=-0.1fY=-0.1fZ=-0.1;
fOpacity=1.0;
aXYZColor3=0.5*aXYZColor1;
若在乘操作前的aXYZColor3为fX=0.0fY=0.0fZ=0.0fOpacity=1.0;
乘操作之后XYZColor3将为fX=0.1fY=0.05fZ=0.05fOpacity=1.0;
aXYZColor3=aXYZColor 1/0.5*;
若除操作前aXYZColor3为fX=0.0fY=0.0fZ=0.0;
fOpacity=1.0;
除操作之后的aXYZColor3将为fX=0.4fY=0.2fZ=0.2;
fOpacity=1.0;
使用有色彩的多形性的例2所有色类别衍生自主类别Color(框58)。可以编写多形函数和方法函数,它们将TColors。以下给出的即这种方式如何工作的例子。
确定色彩之间的色调差。
以下方法函数作为输入两个TColors并返回这些色彩之间的色调差。该色调差是在Lab或Luv色空间中被准确定义的量。以下例子使用了基于Luv的定义。
Coordinate HueDifference(TColor& RefColor1,TColor&Color2){//Construct two Luv ColorsTLuvColor aLuvColor1(RefColor1),aLuvColor2(Color2);
return(RefColor1.GetHueDifference(Color2));
}确定亮度的相关性另一例子是计算色彩亮度的相关性。
Coordinate CorrelateOfLightness(TColor& Color1){//Construct Luv ColorTLuvColor aLuvColor1(Color1)return(a Luv Color1.Get CorreleteOfLightness());
}
配色单色通常,配色发生在一个内部色(在某些色空间,无论校准的或未校准的)被变换到另一色空间之时,尤其是对未校准的色空间(它精密地表示了在一特定设备上的特定色)而言。其逆过程也为如此。在本发明的结构54中,配色处理及功能在一配色主类别TColorMather(框70)中得以实现,该主类别在所有衍生自类别TDeviceColor(框60)的未校准目标内部通过对每个这种设备色类别目标中的TColorProfile引用而获得的。即,正是由于这类引用,TColorProfile(框68)就有了一种从类别TColorMacher(框70)中“获取”配色程序储存器的手段。可被配色程序利用的抽样轮廓在图5中显示为类别TApple ColorProfile(框72)。
本发明的体系结构54并不是指定某一特定配色算法而否定另一种。使用任一通用交换程序的接口(API)程序,都可把任意配色处理放入或存储在类别TC Clor Matcher(框70)中。也就是说体系结构54可容纳任何配色机制。类别TColorMatcher的配色程序可随意使用给定色中包含的色域和色轮廓以实现配色。放入结构54中的用户提供的配色程序可以解释(只要存在的)系统预置色轮廓,或解释(只要存在的)用户提供的色轮廓中的专用信息。
图8图示说明了使用本发明的体系结构54的多个外设14之间进行单个色彩配色的方式。所示例的多个外设是操作在输入设备或源设备的RGB色空间的Color中的平板扫描仪22这类的彩色设备14,以及操作在输出设备或目的设备的CYMK色空间的Color中的打印机36之类的彩色设备14。图8也示出了作为数据结构存储在类别TColorProfile(框68)中的扫描仪色调再现曲线TRC22,作为数据结构存储在类别TColorGamut(框66)中的扫描仪色域CG22,作为数据结构存储在类别TColorGaimut(框66)中的打印机色域CG36,以及作为数据结构存在类别TColorProfile(框68)中的打印机反向色调再现曲线TRC36。图8中还示出了作为数据结构存在类别TColorGamut(框66)中的色空间XYZ以及用于在打印机36的CYMK色空间和扫描仪22的RGB色空间之间进行配色的类别TColorMatcher(框70)的配色程序。
通常,参照图8有了存储在结构54中的色域和色轮廓信息处理器12就被初始化,作为该彩色信息源的来自扫描仪22的原始色彩数据就被输入到数据处理器12里。然后,结构54将运用类别TColorProfile(框68)以及色调再现曲线TRC22修正该原始RGB数据。通过调用类别TColorGamut(框66)的色域CG22以及适当的方法函数结构54就把修正后的RGB色彩数据变换到XYZ色空间。然后调用类别TColorProfile以获取类别TColorMatcher(框70)的配色程序以便对RGB彩色设备22的XYZ色与对应于打印机36的CYMK色的XYZ色空间的色进行配色。然后用色域CG36将配好的XYZ色变换成CYMK色。进而,通过调用和使用类别TColorProfile(框68)的色调再现曲线TRC36将配好的CYMK色作预失真处理。该预失真的色彩数据最后被传送到打印机36用配色过的CYMK色打印出来。因此,根据本发明的结构特性,任意外设都可被加至处理器12而且可与任何其它外设14进行配色。
以上已对包括配色在内的色彩处理进行了叙述。本发明之原理还可扩展到彩色图象处理。该图象不仅可包括单色,亦可包括成组的色或色集,就象一般举例都用的三色图象一样。例如,一个图象中的每个单色象素都可用上述配色处理进行变换。为优化处理速度,配色处理可提供一输入象素流(以某种色类别格式)和返回一输出象素流(以另一类别格式)。
在一最佳实施例中,涉及了三种配色,(ⅰ)比色,它是色谱和亮度的等式;(2)外观,它是源色域到目的色域的变形以使色彩或图象看起来正确无误;以及(3)准确性,它是色度和绝对亮度的等式。外观配色是三种配色中最具主观性的。
配色可发生在两个层级中的任意层级。TColor层级通常用于光点色彩而TGImage通常用于图象。如何以及怎样完成配色是一比较复杂的过程。图9,图10和图11示出了配色的控制流程。图9示出了根据本发明最佳实施例的典型配置。处理始于由扫描仪900将文件进行扫描之时。在功能框910处修正扫描信息并在框920处将其转换到XYZ图形空间。然后,配色程序将信息变换成打印机960可识别的信息。变换后的信息先储存在设备空间940中并在被输出至打印机960之前在设备修正功能框950处进行修正。光点配色发生于几何再现(geometry rendering)而图象配色发生于RenderImage之中。幸运地,使用和提供一种新的配色程序是直接的和简捷的。图12示出了一最佳实施例中进行配色置换的两种方法。系统预置(0)示出了不存在置换预置配色情况下所发生的处理。若无置换出现,则处理准确的色外形或进行彩色矩阵配色。若一个独立的软件销售商(ISV)置换系统预置配色程序(1),则该ISV提供的配色程序使用预置的ColorProfile。若ISV提供一个ColorMatcher及一个Color Profile,则处理示于情况(2)中。
图13示出了Booch色类别图。在一个最佳实施例中的色彩类别对应于现实世界中的色空间。如图13所示,每一色类别都知道如何将其本身转换成和变换出RGB色和XYZ色。如图13所示,参见图13,直接从TColor衍生的色彩是校准色,这意味着若色彩的部件值已知,到该色彩绝对是已知的。校准色的例子是XYZColor。
诸如图9中的扫描仪900和打印机960之类的输入/输出彩色硬件设备具有一内部缺陷,即这些设备只产生人类视觉系统可见的色彩的子集。从现实世界设备输入/输出的DeviceColor的色彩通常不是已校准的,除非有一些其它信息与该色彩相联。在一个最佳实施例中的其它信息就是该设备的ColorProfile。其例示于图13中。
图象处理图象处理过程中,配色不是发生在单色之间而是在TGImage之间。
与色彩类似,TGImages有一个对一个色轮廓的引用。图14示出了两个一最佳实施例中的色轮廓,ColorGamut&ColorProfile。
配色实现用户可在控制面板级接通或断开配色操作。若配色操作被接通,用户可选择由操作系统提供的以下预置配色程序中之一比色,外观,或准确性。在应用级,可通过生成一个配色程序并由SceneBundle采用来置换系统预置的配色程序。然后,系统可以决定采用哪一种配色程序。
此外,应用程序必须允许用户选择色轮廓以使用于每个设备而非只是预置的设备。
色域和轮廓图14是一色轮廓,它包括根据本发明的一个最佳实施例图示的数据。每个设备色彩和图象都有对色轮廓的引用。色轮廓决定可在设备上产生并输出何种色彩(色域)以及该设备制成这些色彩的质量如何(色调再现曲线)。除定义一个设备之外,色轮廓也必须包括实现信息,以便在XYZ色和RGB色之间进行双向转换。由于期望置换系统预置配色的应用程序必须为彩色设备提供自身的色轮廓,所以上述特性尤其重要。尽管配色很重要,它仍必须与现有色彩结构保持一致才能得以实现。
置换操作系统ColorProfile图15示出了本发明的一个最佳实施例中来自类别TColorProfile的子分类操作,用于将色轮廓提供给另一应用程序。来自TColorProfile的子分类确保一个经过子分类的ColorMatcher遇到一个它不明白的有一个可接受的系统预置行为。虽然这会使置换的轮廓变大,但因标准色轮廓目标很小所以这些色轮廓并不会太大。
在TColor Profile中有关该讨论的重要方法是TColor Profile(const TColorGamut*theColorGamut);
Virtual void ConvertRGBtoXYZ(const TRGBColor&a RGBColor,TXYZColor&aConvertedXYZColor)const;
virtual void ConvertXYZtoRGB(const TXYZColor& a XYZColor,TRGBColor&aConvertedRGBColor)const;
ConvertRGBtoXYZ和ConvertXYZ to RGB方法是虚拟的,所以它们才可以被置换并与提供的色轮廓一起工作。若这些方法不被置换,则在RGB和XYZ之间的变换基于预置的变换。
配色类别在最佳实施例中执行配色的目标是ColorMather。它在最佳实施例中必须是可再入的。虽然在ColorMatcher中并无存储的状态,但事实上Color Mathers将产生一个可存储在彩色高速缓冲存储器(DeviceCache)中的状态。在配色过程中所用的彩色高速缓冲存储器被储存在GrafDevice中。
配色可分为两部分(1)色轮廓,用于表示数据,以及(2)配色程序,用于表示操作数据的配色算法。配色是通过把输入设备的色轮廓变换到输出设备的色轮廓上完成的。一旦完成了该变换,它就会被用于TColor或TGImage。
图16示出了根据一个最佳实施例的TColorMatcher类别图和三个预置配色类别实施(TColorimetricColorMatcher,TAppeeramceColorMatcher,以及TExacColorMatcher)。
TColorMatcher是一个具有三个必须被置换的重要的纯虚拟方法的抽象主类别,它们是virtual void ColorMatch(const TColor&theColor,TColor&theMatchedColor,constTColorCache*theColorCache)=0;
virtual void ColorMatch(const TGlmage& theImage,TGImage& theMatchedImage,const TColorCache * theColorCache)=0;
virtual TColorCache * CreateColorCache (const TColorProfile& Source,const TColorProfile&Destination,const TColorCache*theColorCache)=0;
每个Color Matcher必须提供一个可在TColor和TGimagez间进行配色的ColorMatch方法。若由于某种原因,源色以及匹配色(图象)相同,则不会发生什么事,因为任何色彩或图象已自动与其本身匹配。由于配色程序必须再进入,所以三种方法都能进入高速缓冲存储器。
预置配色系统预置配色是否在再现过程中发生配色取决于SeneBundle的状态。以下示出了TSceneBundle类别定义class TSceneBundlepublic MCollectible{public
…virtual void AdoptColorMatcher (TColorMatcher * Matcher);
virtual TColorMatcher*OrphanColorMatcher();
privateTColorMatcher*fColorMatcher;nil during construction.
…}在构成过程中,指向TColorMatcher的指针被设置指向由用户在控制面板级选作预置的配色程序。配色发生在再现途径中的CopyBits里。
以下的伪码段示出了系统预置配色的发生过程//default color matcher has been selected by the user.TSceneBundle mySceneBundle;
…//Create all Colors and or TGImages with STANDARD color profiles…theGrafPort.BeginFrame(mySceneBundle);
…//Color Matching will occur on every Draw in graf port Draw object1
Draw object2···Draw Object ntheGrafPort.EndFrame();
…置换预置的配色一个最佳实施例中提供了两种置换配色的方法。首先,用户Color Matcher使用并部分置换一组STANDARD Color-Profiles。第二种情况下,用户可定义一组Color Profile并置换预置的ColorMatcher。下列伪码示出了第二种情况下所需的步骤。
//Defining and implementing ColorProfiles for the source and destination colors.
class TISVColorProfilepublic TColorProfile{publicTISVColorProfile(const TTex & FileName,const TColorGamut*theDefaultGamut);
virtual void ConvertRGBtoXYZ(const TRGBColor& aRGBColor,TXYZColor& aConvertedXYZColor)const;
virtual void ConvertXYZ to RGB(const TXYZColor& aXYZColor,TRGBColor& aConvertedRGBColor)const…other methods…}//Define your own ColorMatcher class.
class TISVColorMatcherpublic TColorMatcher{publicTISVColorMatcher();
virtual void ColorMatch(const TColor& theColor,TColor&theMatchedColor,const TColorCache*the ColorCache);
virtual void ColorMatch(const TGImage&theImage,TGImage&theMatchedImage,const TColorCache*the ColorCache);
virtual TColorCache * CreateColorCache (const TISVColorProfile&aSource,const TISVColorProfile&aDestination,TColorCache*theColorCache);

other methods…]//create color profiles from information in File1 and File2TISVColorProfile aSourceProfile(File1,theDefaultGamut);
TISVColorProfile aDestinationProfile(File2,theDefaultGAmut);
//create the color matcher and cacheTISVColorMatcher*aColorMatcher;
aColorMatcher=new TISVColorMatcher();
aColorMatcher->GreateColorCache(aSourceProfile,aDestination,aColorMatcher)//create the colors from your source profileTRGBColor SourceColor(aSourceProfile,1.0,.5,.7);
TRGBColor DestinationColor(aDestinationProfile);
//create the SceneBundle and have the matching doneTSceneBundle mySceneBundle;
mySceneBundle.AdoptColorMatcher(aColorMatcher);
the GrafPort.BeginFrame(mySceneBundle);
…//Color Matching will occur on every Draw in graf portDraw Object1Draw Object2···Draw Object ntheGrafPort.EndFrame();

权利要求
1.一种系统,其特征在于包括(a)处理器;(b)至少一个与该处理器相连的外设;(c)一个存储器,该存储器存有可输出到上述至少一个外设的信息;(d)一个色空间,该色空间包括该至少一个外设的模型特性;以及(e)用于利用色空间把存储的信息变换成最佳显示图象以输出到所述至少一个外设的装置。
2.权利要求1所述系统,还包括(a)从一校准色设定一种色的方法;以及(b)存储由上述外设之一所指定的色域的方法。
3.权利要求2所述系统,还包括存储一个色调再现曲线的装置,该色调再现曲线对所述至少一个外设是最佳的。
4.权利要求1所述系统,其中所述把存储信息变换成最佳显示图象以供输出到所述外设之一的装置把一个未校准色变换成一RGB色空间中RGB色,并将该RGB色变换成XYZ色空间中的校准的XYZ色。
5.权利要求1所述系统,其中,把存储的信息变换为最佳显示图象的装置包括把一个校准色变换成校准色空间中的XYZ色并把该XYZ色变换成RGB色空间中的未校准RGB色的装置。
6.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置可扩展以支持其它色空间。
7.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置有一个第一样板类别供程序员使用以便加入一校准色空间。
8.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置有一个第二样板类别供程序员使用以便加入一未校准色空间。
9.权利要求7所述系统,其中,将存储的信息变换成最佳显示图象的装置有一类别(TColorGamut),该类别有一文档构成程序,程序员可用该文档构成程序存储给定外设的色域数据。
10.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置有一类别(TColorPrfile),该类别有一供程序员使用以存储给定外设的色调再现曲线数据的文档构成程序。
11.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置可扩展以支持不同外设的色彩配色的多个方法函数。
12.权利要求1所述系统,其中,把存储的信息变换成最佳显示图象的装置由C++编程语言实现。
13.权利要求12所述系统,包括用于为C++编程语言优化的继承目标信息的装置。
14.权利要求1所述系统,其中,把存储的信息变换为最佳显示图象的装置采用了面向目标的操作系统。
15.可把信息输出到与有存储器的处理器相连的至少一个外设的方法,该方法包括以下步骤(a)在存储器中存储能输出到至少一个外设的信息;(b)存储包括至少一个外设的模型特征的色空间;以及(c)用该色空间把存储的信息转换成最佳显示图象以供输出到至少一个外设。
16.权利要求15所述方法,还包括以下步骤(a)从一个校准色中设定一个色;以及(b)存储由至少一个外设指定的色域。
17.权利要求16所述方法,还包括存储为至少一个外设而优化的色调再现曲线的步骤。
18.权利要求15所述方法,其中的步骤(c)把一个未校准色转换成RGB色空间中的RGB色并将该RGB色变换成XYZ色空间中的校准的XYZ色。
19.权利要求15所述方法,其中的步骤(c)可扩展以支持其它色空间。
20.权利要求15所述方法,其中的步骤(c)有一个第一样板类别供程序员使用以加入一校准色空间。
21.权利要求15所述方法,其中的步骤(c)有一个第二样板类别供程序员使用以加入一未校准色空间。
22.权利要求20所述方法,其中的步骤(c)有一类别(TColorGamut),该类别有一文档构成程序,供程序员使用以存储一给定外设的色域数据。
23.权利要求15所述方法,其中的步骤(c)有一类别(TColorProfile),该类别有一供程序员使用以存储给定外设的色调再现曲线数据的文档构成程序。
24.权利要求15所述方法,其中的步骤(c)可扩展以支持用于不同外设的色彩配色的多个方法函数。
25.权利要求15所述方法,其中的步骤(c)是用C++编程语言实现的。
26.权利要求25所述方法,还包括为C++编程语言的继承目标信息的步骤。
27.权利要求15所述方法,其中的步骤(c)采用面向目标的操作系统。
全文摘要
本发明涉及一种处理色彩信息的系统和方法,其最佳实施例是一种有两个层级的面向目标设计,一个层级包括一个类别(色彩),它定义一个虚拟抽象主类别而且是包括校准色的储存器类别,和另一类别,它定义以虚拟抽象为主类别并不是包含未校准色的储存器类别(TDevice Color)。有几种校准色类别,包括一个定义XYZ色空间的类别(TXYZcolor)直接来自类别(Color)而有几种未校准色类别,包括一个类别(TRGBColor)则直接来自类别(TDeviceColor)。一个存储可与体系结构交互的多个外设的色域信息的类别(TColorGamut),和一个存储这些外设的色调再现曲线的类别(TColorProfile),以及用于各种色彩处理的方法函数一起提供数据结构。该体系结构可扩展以便在新的色彩类别模型和设备被开发时更易于新色彩类别相结合,并根据需要加入新配色算法,使用户在自己选择的色彩空间工作,并与体系结构交互的任意外设之间提供配色。
文档编号H04N1/60GK1113671SQ94190631
公开日1995年12月20日 申请日期1994年1月10日 优先权日1993年6月16日
发明者詹姆斯·安东尼·夸拉托, L·贝利斯·霍尔特, 杰里·哈里斯 申请人:塔里根特公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1