Quartz2DIOS软件开发编程指南之颜色和颜色空间.docx
-
资源ID:96537967
资源大小:168.35KB
全文页数:9页
- 资源格式: DOCX
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
Quartz2DIOS软件开发编程指南之颜色和颜色空间.docx
不同的设备(显示器、打印机、扫描仪、摄像头)处理颜色的方式是不同的。每种设备都有其所能支持的颜色值范围。一种设备能支持的颜色可能在其它设备中无法支持。为了有效的使用颜色及理解 Quartz 2D 中用于颜色及颜色空间的函数,我们需要生疏在Color Management Overview 文档中所使用的术语。该文档中争论了色觉、颜色值、设备依靠及设备颜色空间、颜色匹配问题、再现意图(rendering intent)、颜色治理模块和ColorSync。在本章中,我们将学习 Quartz 处理颜色和颜色空间,以及什么是 alpha 组件。本章同时也争论如下问题:· 创立颜色空间· 创立和设置颜色· 设置再现意图颜色与颜色空间Quartz 中的颜色是用一组值来表示。而颜色空间用于解析这些颜色信息。例如,表 4-1 列出了在全亮度下蓝色值在不同颜色空间下的值。假设不知道颜色空间及颜色空间所能承受的值,我们没有方法知道一组值所表示的颜色。假设我们使用了错误的颜色空间,我们可能会获得完全不同的颜色,如图4-1 所示。颜色空间可以有不同数量的组件。表 4-1 中的颜色空间中其中三个只有三个组件,而 CMYK有四个组件。值的范围与颜色空间有关。对大局部颜色空间来说,颜色值范围为0.0, 1.0,1.0 表示全亮度。例如,全亮度蓝色值在Quartz 的 RGB 颜色空间中的值是(0, 0, 1.0)。在Quartz 中,颜色值同样有一个 alpha 值来表示透亮度。在表 4-1 中没有列出该值。alpha 值alpha 值是图外形态参数,Quartz 用它来确定的绘图对象如何与已存在的对象混合。在全强度下,的绘图对象是不透亮的。在0 强度下,的绘图对象是完全透亮的。图4-2显示了 5 个大的方形,分别使用了 alpha 值为 1.0, 0.75, 0.5, 0.1 和 0.0。随着大方形逐渐变得透亮,底下的小的不透亮的方形渐渐显现出来。我们可以将两个对象绘制到 上,而 可以在渲染前通过设置全局的 graphics context 来设置自己的透亮度。图 4-3 显示了将全局的透亮度设置为0.5 和 1.0 的效果。在标准混合模式(图外形态的默认模式)下,Quartz 使用下面的公式来混合源颜色和目标颜色的组件:1. destination = (alpha * source) + (1 - alpha) * destination复制代码其中源颜色是绘制的颜色,目标颜色是背景颜色。该公式可用于绘制的外形和图像。对于对象透亮度来说,alpha 值为 1.0 时表示对象是完全不透亮的,值0.0 表示对象是完全透亮的。0.0 与 1.0 之间的值指定对象的透亮度。我们可以为全部承受颜色的程序指定一个 alpha 值作为颜色值的最终一个组件。同样也可以使用CGContextSetAlpha 函数来指定全局的 alpha 值。记住,假设同时设置以上两个值,Quartz 将混合全局 alpha 值与对象的 alpha 值。为了让 完全透亮,我们可以调用 CGContextClearRect 函数来去除图形上下文(graphics context)的 alpha 通道。例如,我们可以在给图标创立一个透亮遮罩或者使窗口的背景透亮时,承受这种方法。创立颜色空间Quartz 支持颜色治理系统使用的标准颜色空间,也支持通用的颜色空间、索引颜色空间和模式(pattern)颜色空间。设备颜色空间以一种简便的方法在不同设备间表示颜色。它用于在两种不同设备间的本地颜色空间转换颜色数据。设备依靠颜色空间的颜色在不同设备上显示时效果是一样的,它扩展了设备的力量。基于此,设备依靠颜色空间是显示颜色时最好的选择。假设应用程序有准确的颜色表示需求,则应当总是使用设备依靠颜色空间。通用颜色空间(generic color space)是一种常用的设备依靠颜色空间。通用颜色空间通过操作系统为我们的应用程序供给最好的颜色空间。它能使在显示器上与在打印机上打印效果是一样的。引用text“>重要:IOS 不支持设备依靠颜色空间或通用颜色空间。IOS 应用程序必需使用设备颜色空间(device color space)。创立设备依靠颜色空间为了创立设备依靠颜色空间,我们需要给 Quartz 供给白色参考点,黑色参考点及特别设备的 gamma 值。Quartz 使用这些信息将源颜色空间的颜色值转化为输出设备颜色空间的颜色值。Quartz 支持设备依靠颜色空间,创立此空间的函数如下:· L*a*b 是非线性转换,它属于 Munsell 颜色符号系统(该系统使用色度、值、饱和度来指定颜色)。 L 组件表示亮度值,a 组件表示绿色与红色之间的值,b 组件表示蓝色与黄色之间的值。该颜色空间设计用于模拟人脑解码颜色。使用函数CGColorSpaceCreateLab 来创立。· ICC 颜色空间是由 ICC(由国际颜色聪明,International Color Consortium)颜色配置而来的。ICC 颜色配置了设备支持的颜色域,该颜色域与其它设备属性相符,所以该信息可被用于将一个设备的颜色空间准确地转换为另一个设备的颜色空间。大多数设备制造商都支持 ICC 配置。一些彩色显示器和打印机都内嵌了ICC 信息,用于处理诸如 TIFF的位图格式。使用函数 CGColorSpaceCreateICCBased 来创立。· 标准化 RGB 是设备依靠的 RGB 颜色空间,它表示相对于白色参考点(设备可生成的最白的颜色)的颜色。 使用函数 CGColorSpaceCreateCalibratedRGB 来创立。· 标准化灰度是设备依靠的灰度颜色空间,它表示相对于白色参考点(设备可生成的最白的颜色)的颜色。 使用函数 CGColorSpaceCreateCalibratedGray 来创立。创立通用颜色空间通用颜色空间的颜色与系统匹配。大局部状况下,结果是可承受的。就像名字所示意的那样, 每个“通用”颜色空间(generic gray, generic RGB, generic CMYK)都是一个指定的设备依赖颜色空间。通过颜色空间格外简洁使用;我们不需要供给任何参考点信息。我们使用函数CGColorSpaceCreateWithName 来创立一个通用颜色空间,该函数可传入以下常量值:· kCGColorSpaceGenericGray:指定通用灰度颜色空间,该颜色空间是单色的,可以指定从 0.0(纯黑)到 1.0(纯白)范围内的颜色值。· kCGColorSpaceGenericRGB:指定通用 RGB 颜色空间,该颜色空间中的颜色值由三个组件(red, green, blue)组成,主要用于彩色显示器上的像素。RGB 颜色空间中的每个组件的值范围是0.0, 1.0。· kCGColorSpaceGenericCMYK:指定通用 CMYK 颜色空间,该颜色空间的颜色值由四个组件(cyan, magenta, yellow, black),主要用于打印机。CMYK 颜色空间的每个组件的值范围是0.0, 1.0。创立设备颜色空间设备颜色空间主要用于 IOS 应用程序,由于其它颜色空间无法在IOS 上使用。大多数状况下,Mac OS X 应用程序应使用通用颜色空间,而不使用设备颜色空间。但是有些Quartz程序期望图像使用设备颜色空间。例如,假设调用CGImageCreateWithMask 函数来指定一个图像作为遮罩,图像必需在设备的灰度颜色空间(device gray color space)中定义。我们可以使用以下函数来创立设备颜色空间:· CGColorSpaceCreateDeviceGray:创立设备依靠灰度颜色空间· CGColorSpaceCreateDeviceRGB:创立设备依靠 RGB 颜色空间· CGColorSpaceCreateDeviceCMYK:创立设备依靠 CMYK 颜色空间创立索引颜色空间和模式颜色空间索引颜色空间包含一个有 256 个词目的颜色表,和词目映射到根底颜色空间。颜色表中每个词目指定一个根底颜色空间中的颜色值。使用CGColorSpaceCreateIndexed 函数来创立。模式颜色空间在绘制模式时使用。 使用 CGColorSpaceCreatePattern 函数来创立。设置和创立颜色Quartz 供给了一套函数用于设置填充颜色、线框颜色、颜色空间和alpha 值。每个颜色参数都是图外形态参数,这就意味着一旦设置了,设置将被保存并影响后续操作,直到被修改为止。一个颜色必需有相关联的颜色空间。否则,Quartz 不知道如何解析颜色值。进一步说,说是我们必需为绘制目标供给一个适宜的颜色空间。如图4-4 所示,左边是CMYK 颜色空间中的蓝色填充色,右边是 RGB 颜色空间中的蓝色填充色。这两个颜色值在理论上是一样的, 但只有在一样颜色空间下的一样颜色值显示出来才是一样的。我们可以使用CGContextSetFillColorSpace 和 CGContextSetStrokeColorSpace 函数来设置填充和线框颜色空间,或者可以使用以下便利函数来设置设备颜色空间的颜色值。Table 4-2 Color-setting functions函数CGContextSetRGBStrokeColor CGContextSetRGBFillColor CGContextSetCMYKStrokeColor CGContextSetCMYKFillColorCGContextSetGrayStrokeColor用途设备 RGB。在生成 PDF 时,Quartz 像在相应的通用颜色空间中一样设备 CMYK。在生成 PDF 时,保持设备 CMYK设备灰度。在生成 PDF 时,Quartz 像在相应的通用颜色空间中一样写CGContextSetGrayFillColor CGContextSetStrokeColorWithCol or CGContextSetFillColorWithColor CGContextSetStrokeColor CGContextSetFillColor任何颜色空间;供给一个指定颜色空间的CGColor 对象。当前颜色空间。不推举使用。更多时候我们使用CGColor 对象和函数or。我们在填充及线框颜色空间中指定填充及线框颜色值。例如,在RGB 颜色空间中,我们使用数组(1.0, 0.0, 0.0, 1.0)来表示红色。前三个值指定红色值为全强度,而绿色和蓝色为零强度。第四个值为 alpha 值,用于指定颜色的透亮度。假设需要在程序中重复使用颜色,最有效的方法是通过设置填充色和线框色来创立一个CGColor 对象,然后将该对象传递给函数CGContextSetFillColorWithColor 及CGContextSetStrokeColorWithColor。我们可以按需要保持CGColor 对象,并可以直接使用该对象来改进应用程序的显示。我们可以调用 CGColorCreate 函数来创立 CGColor 对象,该函数需要两个参数:CGColorspace 对象及颜色值数组。数组的最终一个值指定alpha 值。设置再现意图(Rending Intent)“再现意图”用于指定如何将源颜色空间的颜色映射到图形上下文的目标颜色空间的颜色范围内。假设不显示指定再现意图,Quartz 使用相对色度再现意图(relative colorimetric rendering intent)应用于全部绘制(不包含位图图像)。对于位图图像,Quartz 默认使用感知(perceptual)再现意图。我们可以调用 CGContextSetRenderingIntent 函数来设置再现意图,并传递图形上下文(graphics context)及下例常量作为参数:· kCGRenderingIntentDefault:使用默认的渲染意图。· kCGRenderingIntentAbsoluteColorimetric:确定色度渲染意图。将输出设备颜色域外的颜色映射为输出设备域内与之最接近的颜色。这可以产生一个裁减效果,由于色域外的两个不同的颜色值可能被映射为色域内的同一个颜色值。当图形使用的颜色值同时包含在源色域及目标色域内时,这种方法是最好的。常用于logo 或者使用专色(spot color)时。· kCGRenderingIntentRelativeColorimetric:相对色度渲染意图。转换全部的颜色(包括色域内的),以补偿图形上下文的白点与输出设备白点之间的色差。kCGRenderingIntentPerceptual:感知渲染意图。通过压缩图形上下文的色域来适应输出设备的色域,并保持源颜色空间的颜色之间的相对性。感知渲染意图适用于相片及其它简单的高细度图片。· kCGRenderingIntentSaturation:饱和度渲染意图。把颜色转换到输出设备色域内时,保持颜色的相对饱和度。结果是包含亮度、饱和度颜色的图片。饱和度意图适用于生成低细度的图片,如描述性图表了解更多请访问 zhiyou100