iPhone – 获取CGDataProvider背后数据的指针?

我正在尝试获取CGImage并将其数据复制到缓冲区中以供以后处理。 下面的代码是我到目前为止的,但有一件事我不喜欢它 – 它复制图像数据两次。 一次用于CGDataProviderCopyData() ,一次用于:getBytes:length调用imgData。 我还没有找到一种方法将图像数据直接复制到我的缓冲区并删除CGDataProviderCopyData()步骤,但必须有一种方法……任何指针? (… pun ftw)

 NSData * imgData =(NSData *)(CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef)));

 CGImageRelease(myCGImageRef);

 //我有一个以前定义的指向名为“mybuff”的可用缓冲区的指针
 [imgData getBytes:mybuff length:[imgData length]];

除非您在使用Instruments测量时遇到性能问题,否则我认为复制它两次并不是一个大问题。 您可以直接存储CFDataRef imgData而不是mybuff。

编辑
我在谈论这种代码:
在类接口中添加一个数组:

 NSMutableArray *images; 

在你的init:方法:创建数组:

 images = [[NSMutableArray alloc] init]; 

并且有一个dealloc;

 -(void)dealloc{ [images release]; } 

并在保存每个图像的代码中:

 CGDataRef imageDataRef = CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef))); [images addObject: (NSData*)imageDataRef]; CGRelease(imageDataRef); 

看到这个答案: CGDataProviderCopyData()实际上是否复制了字节? 或只是指针?

看起来直接访问CGDataProvider后面的缓冲区仅限于私有API。