指针数据,如果指向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?
由于
答案 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];