Basics of Using Image I/O
Image I/O的基本使用
The Image I/O framework provides opaque data types for reading image data from a source (CGImageSourceRef) and writing image data to a destination (CGImageDestinationRef). It supports a wide range of image formats, including the standard web formats, high dynamic range images, and raw camera data. Image I/O has many other features such as:
The fastest image decoders and encoders for the Mac platform
The ability to load images incrementally
Support for image metadata
Effective caching
You can create image source and image destination objects from:
URLs. Images whose location can be specified as a URL can act as a supplier or receiver of image data. In Image I/O, a URL is represented as the Core Foundation data typeCFURLRef.
The Core Foundation objectsCFDataRefandCFMutableDataRef.
Quartz data consumer (CGDataConsumerRef) and data provider (CGDataProviderRef) objects.
Image I / O框架提供了用于从源(CGImageSourceRef)读取图像数据并将图像数据写入目标(CGImageDestinationRef)的不透明数据类型。 它支持各种图像格式,包括标准网络格式,高动态范围图像和原始相机数据。 图像I / O有许多其他功能,如:
用于Mac平台的最快图像解码器和编码器
加载图像的能力
支持图像元数据
有效的缓存
您可以从以下内容创建图像源和图像目标对象:
URLs. 其位置可以指定为URL的图像可以充当图像数据的供应商或接收者。 在图像I / O中,URL表示为Core Foundation数据类型CFURLRef。
Core Foundation对象CFDataRefandCFMutableDataRef。
Quartz数据使用者(CGDataConsumerRef)和数据提供者(CGDataProviderRef)对象。
Using the Image I/O Framework in Your Application
在应用程序中使用图像I / O框架
Image I/O resides in the Application Services framework in OS X, and in the Image I/O framework in iOS. After adding the framework to your application, import the header file by including this statement:
#import <ImageIO/ImageIO.h>
Supported Image Formats
支持的图像格式
The Image I/O framework understands most of the common image file formats, such as JPEG, JPEG2000, RAW, TIFF, BMP, and PNG. Not all formats are supported on each platform. For the most up-to-date list of what Image I/O supports, you can call the these functions:
CGImageSourceCopyTypeIdentifiersreturns an array of theUniform Type Identifiers(UTIs) that Image I/O supports as image sources.
CGImageDestinationCopyTypeIdentifiersreturns an array of the uniform type identifiers (UTIs) that Image I/O supports as image destinations.
You can then use theCFShowfunction to print the array to the debugger console in Xcode, as shown inListing 1-1. The strings in the array returned by these functions take the form ofcom.apple.pict,public.jpeg,public.tiff, and so on.Table 1-1lists the UTIs for many common image file formats. OS X and iOS define constants for most common image file formats; The full set of constants are declared in theUTCoreTypes.hheader file. You can use these constants when you need to specify an image type, either as a hint for an image source (kCGImageSourceTypeIdentifierHint) or as an image type for an image destination.
Listing 1-1Getting and printing supported UTIs
CFArrayRef mySourceTypes = CGImageSourceCopyTypeIdentifiers();
CFShow(mySourceTypes);
CFArrayRef myDestinationTypes = CGImageDestinationCopyTypeIdentifiers();
CFShow(myDestinationTypes);
图像I / O框架了解大部分常见的图像文件格式,如JPEG,JPEG2000,RAW,TIFF,BMP和PNG。并非所有格式都支持在每个平台上。对于最新的图像I / O支持的最新列表,您可以调用这些功能:
CGImageSourceCopyTypeIdentifiers返回图像I / O支持的统一类型标识符(UTI)的数组作为图像源。
CGImageDestinationCopyTypeIdentifiers返回图像I / O支持的统一类型标识符(UTI)的数组作为图像目标。
然后,您可以使用CFShow函数将数组打印到Xcode中的调试器控制台,如清单1-1所示。这些函数返回的数组中的字符串采用com.apple.pict,public.jpeg,public.tiff等形式。表1-1列出了许多常见图像文件格式的UTI。 OS X和iOS为最常见的图像文件格式定义常量;全部常量在UTCoreTypes.h头文件中声明。当您需要指定图像类型时,您可以使用这些常量,作为图像源(kCGImageSourceTypeIdentifierHint)的提示或图像目的地的图像类型。
清单1-1获取和打印支持的UTI
CFArrayRef mySourceTypes = CGImageSourceCopyTypeIdentifiers();
CFShow(mySourceTypes);
CFArrayRef myDestinationTypes = CGImageDestinationCopyTypeIdentifiers();
CFShow(myDestinationTypes);