iphone:创建图像而不分配新内存

时间:2009-07-03 16:38:04

标签: c++ iphone cocoa cocoa-touch

指针数据,如果指向iphone应用程序生成的某些图像。 现在有人使用CGBitmapContextCreate制作这些数据的副本还是使用“就地”的图像?

理想情况下,我想重复使用数据*中的信息,而不是创建此图像的任何其他副本。

void* data = <my data>;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef imageContext = CGBitmapContextCreate(data, w, h, 8, w*8, colorSpace, kCGBitmapByteOrder32Big|kCGImageAlphaPremultipliedLast);
CGImageRef imageRef = CGBitmapContextCreateImage(imageContext);
UIImage* image =[[UIImage alloc] initWithCGImage:imageRef];

更一般地说,这种创建图像的方法对我来说似乎相当复杂。有谁知道这里发生了什么?有没有更简单的方法来创建UIImage?

由于

2 个答案:

答案 0 :(得分:2)

here看起来CGBitmapContextCreate只会使用您传入的内存。但是可以通过调用CGBitmapContextCreateImage来复制数据,

Apple docs:

  

讨论返回CGImage对象   通过CGBitmapContextCreateImage由副本创建   操作。随后的变化   位图图形上下文不会影响   返回图像的内容。在   有些情况下实际上是复制操作   遵循copy-on-write语义,所以   那个实际的物理副本   仅在基础数据时才出现位   在位图图形上下文中   改性。因此,你可以   想要使用生成的图像和   在执行之前释放它   另外绘制到位图中   图形上下文。通过这种方式,你可以   避免实际的物理副本   数据

答案 1 :(得分:1)

这样的事情:

void * data = <my data>;
NSData * newData = [NSData dataWithBytesNoCopy:data length:lengthOfData];
UIImage * image = [[UIImage alloc] initWithData:newData];