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。