版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.10.16 |
前言
ImageIO
框架主要用来读写大多数图像文件格式。 管理颜色和访问图像元数据。接下来几篇我们就详细的解析这个框架。感兴趣的可以看我写的上面几篇。
1. ImageIO框架详细解析(一) —— 基本概览
Introduction - 介绍
图像I / O编程接口允许应用程序读取和写入大多数图像文件格式。最初是Core Graphics
框架的一部分,图像I / O驻留在自己的框架中,允许开发人员独立地使用Core Graphics(Quartz 2D)
。Image I/ O提供了访问图像数据的最终方法,因为它非常高效,可以很容易地访问元数据,并提供颜色管理。
在OS X v10.4
和稍后的ios4
和稍后的版本中,I / O接口可用。
谁适合看这个文章
本文章是为在应用程序中读写图像数据的开发人员编写的。目前使用图像导入器或其他图像处理库的开发人员应该阅读该文档,了解如何使用图像I / O框架。
文档组织
这篇文章是由以下部分组成:
-
- 讨论支持的图像格式,并演示如何在Xcode项目中包含框架,这也是这篇文章的主要内容。
-
Creating and Using Image Sources
- 显示如何创建一个图像源,并从图像源创建一个图像,并从用户界面中提取属性用于展示。
-
Working with Image Destinations
- 提供创建图像目的地的信息,设置其属性,并向其添加图像。
可以参考
-
Image I/O Reference Collection
- 提供图像I / O框架中函数、数据类型和常量的详细描述。
基本使用
下面我们就看一下ImageIO框架的基本使用。
Image I / O
框架提供了不透明的数据类型,用于从源(CGImageSourceRef)读取图像数据,并将图像数据写入目的地(CGImageDestinationRef)。它支持广泛的图像格式,包括标准的web格式、高动态范围的图像和原始的摄像数据。图像I / O有许多其他特征,如:
- Mac平台最快的图像解码器和编码器
- 逐步加载图像的能力
- 支持图像元数据
- 有效的缓存
您可以从以下几个方面创建图像源和图像目标对象:
-
url
。可以将其位置指定为URL的图像可以作为图像数据的提供者或接收方。在图像I / O中,URL被表示为Core Foundation
数据类型CFURLRef。 -
Core Foundation
对象CFDataRef和CFMutableDataRef。 -
Quartz
数据消费者 (CGDataConsumerRef)和数据提供者(CGDataProviderRef)对象。
1. Using the Image I/O Framework in Your Application - 在您的程序中使用Image I/O框架
图像I / O驻留在OS X的应用程序服务框架中,以及在iOS中的I / O框架中。在将框架添加到应用程序之后,通过包含以下语句导入头文件:
#import < ImageIO / ImageIO.h >
2. Supported Image Formats - 支持的图像格式
Image I / O
框架可以理解大多数常见的图像文件格式,如JPEG、JPEG2000、RAW、TIFF、BMP和PNG
。不是所有的格式都支持在每个平台上。对于I / O支持的最新列表,您可以调用这些函数:
- CGImageSourceCopyTypeIdentifiers返回一个Image I/O支持作为图像源的Uniform Type Identifiers数组。
- CGImageDestinationCopyTypeIdentifiers返回一个Image I/O支持作为图像目的地的统一类型识别。
然后可以使用CFShow函数将数组打印到Xcode中的调试器控制台,如Listing 1-1所示。这些函数返回的数组中的字符串以com.apple.pict, public.jpeg, public.tiff
的形式返回。Table 1-1 列出了许多常见图像文件格式的UTIs
。OS X和iOS为大多数常见的图像文件格式定义了常量,完整的常量集在UTCoreTypes
中声明。当你需要指定一个图像类型,您可以使用这些常量,要么作为一个图像源的提示(kCGImageSourceTypeIdentifierHint
)或作为一个图像的图像类型的目的地。
// **Listing 1-1** Getting and printing supported UTIs
CFArrayRef mySourceTypes = CGImageSourceCopyTypeIdentifiers();
CFShow(mySourceTypes);
CFArrayRef myDestinationTypes = CGImageDestinationCopyTypeIdentifiers();
CFShow(myDestinationTypes);
后记
未完,待续~~~