我正在尝试获取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。
以上就是c/c++开发分享iPhone – 获取CGDataProvider背后数据的指针?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562377.html