CodeV

3.1-UIKit框架中的图像

UIKit图像围绕UIImage类而展开。它是一个强大而灵活的类,隐藏其实现细节,使您能够以最少的代码执行许多演示任务。其最常见的模式是从文件加载数据并将生成的图像添加到UIImageView实例。这里有一个例子:

1
2
UIImage *image = [UIImage imageNamed:@"myImage"];
myImageView.image = image;

当然,不限于从外部数据加载图像。iOS使您能够从代码中根据需要创建自己的图像。清单3-1显示了一个简单的例子。它使用您指定的颜色和大小构建一个新的UIImage实例,这将产生从函数返回的颜色样本。

为了实现这一点,清单3-1通过建立图像上下文开始,然后使用UIRectFill()设置颜色并填充上下文,通过从上下文检索和返回一个新的图像。

清单 3-1 演示了基本的绘图框架。这个函数绘制一个彩色矩形,你可以创建自己的蒙那丽莎。只需提供自己的自定义绘图例程,并将目标绘图大小设置为应用程序所需的范围。

清单3-1创建自定义图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIImage *SwatchWithColor(UIColor *color, CGFloat side)
{
// Create image context (using the main screen scale)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(side, side), YES, 0.0);

// Perform drawing
[color setFill];
UIRectFill(CGRectMake(0, 0, side, side));

// Retrieve image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}

以下是需要记住的关于图像的几个简单点:

  • 如本示例所示,您可以通过检查图像的size属性来查询其范围。大小是以点而不是以像素返回,因此数据大小可能是Retina系统返回数量的两倍:
1
2
UIImage *swatch = SwatchWithColor(greenColor, 120);
NSLog(@"%@", NSStringFromCGSize(swatch.size));
  • 您可以使用UIImagePNGRepresentation()函数或UIImageJPEGRepresentation()函数将图像实例转换为PNG或JPEG数据。这些函数返回包含压缩图像数据的NSData实例。
  • 您可以通过其CGImage属性检索获得图像的Quartz表示。UIImage类基本上是一个围绕Core Graphics或Core Image图像的轻量级封装。对于许多Core Graphics函数,您需要一个CGImage类型的引用。由于此属性不适用于使用Core Image创建的图像,因此必须将底层CIImage转换为用于Core Graphics的CGImage

Note

UIImage支持TIFF,JPEG,GIF,PNG,DIB(即BMP),ICO,CUR和XBM格式。您可以使用ImageIO框架加载其他格式(如RAW)。


本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。