以下函数返回哪种类型的数据?

时间:2011-02-17 06:45:08

标签: iphone objective-c cocoa-touch

以下功能返回哪种类型的数据?

 CFDataRef CreateDatafromImage(UIImage *image)
    {

    return CGDataProvidercopyData(CGImageGetDataProvider(image.CGImage));
    }
  1. 二进制图片数据
  2. 原始像素数据
  3. 压缩图像数据
  4. ASCII图像数据

3 个答案:

答案 0 :(得分:4)

我猜最接近的答案是2)原始像素数据。虽然,说实话,我并没有真正看到Binary image dataRaw pixel data之间的区别。至于第三个选择,Compressed image data,我想我可以想象这是如何指出返回的NS / CFData对象是否表示压缩的JPEG数据(例如,100 KB)为它存在于文件中,或者它是否以未压缩的形式表示数据(例如,24位RGB,可能是280 KB)。在这种情况下,我猜你可以说它代表了“未压缩”形式的数据。

但是,你究竟是如何定义“压缩”的呢?例如,假设您有一个已保存的图像并具有以下布局:每像素16位RGB kCGImageAlphaNoneSkipFirst,如此图像中的最后一个示例所示:

http://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/Art/colorformatrgba32.gif

与图中的其他布局相比,您可以将此布局视为在某种意义上被“压缩”。 (见Color Spaces and Bitmap Layout)。

因此,总而言之,当您获得CGImageRef时,图像处于Quartz理解的“本机表示”中。从该方法返回的数据是原始像素数据; 数据不是“JPEG格式”,“PNG格式”或“TIFF格式”等。您可以使用查询功能收集信息关于图像通道,Alpha通道和位深度的组合:CGImageGetBitmapInfo()CGImageGetBitsPerComponent()CGImageGetBitsPerPixel()等。

处理JPEG,PNG,TIFF等图像格式被抽象为其他API和类型,例如CGImageSourceRefCGDataProviderRefCGImageDestinationRefCGDataConsumerRef 。请参阅Moving Data Into Quartz 2DMoving Data Out Of Quartz 2D

答案 1 :(得分:2)

呃......一个CFDataRef对象?

文档在这里:http://developer.apple.com/library/ios/#documentation/CoreFoundation/Reference/CFDataRef/Reference/reference.html

这是一个可以互换使用NSDataCFData的对象。

在内部,CFData调用的返回值创建CGDataProvidercopyData(使用CGImageGetDataProvider)。

祝你好运:)

答案 2 :(得分:1)

它包含在文档中(这是Google首次点击之一)。

这篇特别的技术说明详细介绍了它。

http://developer.apple.com/library/mac/#qa/qa2007/qa1509.html