2

我正在尝试获取 CGImage 并将其数据复制到缓冲区中以供以后处理。下面的代码是我目前所拥有的,但有一点我不喜欢它——它复制了两次图像数据。一次CGDataProviderCopyData()又一次用于:getBytes:length调用 imgData。我一直无法找到将图像数据直接复制到我的缓冲区并删除CGDataProviderCopyData()步骤的方法,但必须有一种方法......任何指针?(……双关语)

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

CGImageRelease(myCGImageRef);

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

2 回答 2

1

请参阅此答案: CGDataProviderCopyData() 是否实际复制字节?还是只是指针?

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

于 2010-04-30T18:07:43.560 回答
0

除非你在使用 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);
于 2010-04-29T20:53:32.327 回答