Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ iphone:在不分配新内存的情况下创建图像_C++_Iphone_Cocoa_Cocoa Touch - Fatal编程技术网

C++ iphone:在不分配新内存的情况下创建图像

C++ iphone:在不分配新内存的情况下创建图像,c++,iphone,cocoa,cocoa-touch,C++,Iphone,Cocoa,Cocoa Touch,如果指针指向由iphone应用程序生成的某个图像,则为数据指针。 现在是否有人正在使用CGBitmapContextCreate复制此数据或使用“就地”图像 理想情况下,我希望重用数据*中的信息,而不是创建此图像的任何附加副本 void* data = <my data>; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef imageContext = CGBitmapContextCr

如果指针指向由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];
void*data=;
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGContextRef imageContext=CGBitmapContextCreate(数据,w,h,8,w*8,颜色空间,kCGBitmapByteOrder32Big | KCGimageAlphaPremultipledLast);
CGImageRef imageRef=CGBitmapContextCreateImage(imageContext);
UIImage*image=[[UIImage alloc]initWithCGImage:imageRef];
更一般地说,这种创建图像的方法在我看来相当复杂。有人知道这里发生了什么吗?有没有更简单的方法来创建UIImage


谢谢

像这样的东西怎么样:

void * data = <my data>;
NSData * newData = [NSData dataWithBytesNoCopy:data length:lengthOfData];
UIImage * image = [[UIImage alloc] initWithData:newData];
void*data=;
NSData*newData=[NSData datawithbytesnopy:数据长度:lengthOfData];
UIImage*image=[[UIImage alloc]initWithData:newData];
看起来CGBitmapContextCreate将只使用传入的内存。但是可以通过调用CGBitmapContextCreateImage复制数据

苹果文档:

讨论返回的CGImage对象 通过CGBitmapContextCreateImage创建一个副本 活动对 位图图形上下文不影响 返回图像的内容。在里面 在某些情况下,实际上是复制操作 遵循写时复制语义,所以 该文件的实际物理副本 位仅在基础数据 在位图图形上下文中是 被改进的。因此,你可以 要使用生成的图像和 在执行之前释放它 位图中的附加图形 图形上下文。这样,你就可以 避免使用文件的实际物理副本 数据


-[UIImage initWithData]对图像数据进行解码,并在此过程中复制图像数据。要在不分配内存的情况下真正创建图像,唯一的方法是将数据预编码为iPhone支持的像素格式,并使用CGBitMapContextCreate进行写时复制实际上我无法让它正常工作。。。如何将格式和大小信息传递给UIImage?那里肯定少了些什么。