图3-4显示了黑熊的图像。这张图片的中心是熊图像的灰度表示,删除了所有颜色。
图 3-4 颜色空间使您能够将图像转换为灰度。 Public domain images courtesy of the National Park Service。
为了创建这幅图,我画了黑熊图像两次。第一次,我画了整个图像。第二次,我剪裁上下文到内部矩形,并将图像转换为灰度。我在原稿的顶部绘制新版本,并在灰度图像周围添加了一个黑色边框。
以下是涉及的步骤:
1 | // Clip the context |
灰度转换的详细信息如清单3-4所示。GrayscaleVersionOfImage()
函数通过使用源图像尺寸构建新的上下文来工作。这种基于“device gray”的上下文每个像素存储1个字节,其中不包含alpha信息。它形成一个只能处理灰度结果的新绘图区域。
在现实世界中,当用紫色蜡笔绘画时,任何纸张上出现的蜡笔标记处将是紫色的。灰度绘图上下文就像是黑白照片。无论你画的是什么颜色,结果将总是灰色的,亮度与您正在绘制的蜡笔的匹配,但丢弃了色彩。
与所有上下文一样,由您来检索生成结果并将数据存储到图像实例中。这里,函数绘制源图像并使用CGBitmapContextCreateImage()
检索生成灰度的版本。此调用类似于用于位图上下文的UIGraphicsGetImageFromCurrentImageContext()
函数,都需要一些内存管理步骤。
你最终得到一个UIImage
实例,它保留了原始的亮度值而不是它的颜色值。Quartz代替你处理了所有的细节工作。您不需要从每组源像素单独计算亮度级别。你只需要指定目的地的特征(它的大小和它的颜色空间),剩下的Quartz为你做完了。这是一个非常容易的方法来处理图像。
清单3-4构建图像的灰度版本
1 | UIImage *GrayscaleVersionOfImage(UIImage *sourceImage) |
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。