CGBitmapContextGetData - 无法将数据复制到返回的内存块

时间:2012-10-01 16:54:31

标签: objective-c core-graphics memcpy cgbitmapcontextcreate

我使用RGBACGBitmapContextCreateCGContextDrawImage数据绘制到屏幕上。当我尝试使用bitmapcontextCGBitmapContextCreate,...)创建pixelBuffer时我已经malloc'编辑pixelBuffer并将数据放在那里,工作得很好。

但是,我希望Core Graphics管理自己的内存,所以我想将NULL传递给CGBitmapContextCreate,然后通过调用CGBitmapContextGetData获取指向内存块的指针,并使用RGBA将我的memcpy缓冲区复制到上述块。但是,我的memcpy失败了。请参阅下面的代码。 知道我做错了吗?

gtx = CGBitmapContextCreate(NULL, screenWidth, screenHeight, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaNoneSkipLast);
void *data = CGBitmapContextGetData(gtx);
memcpy(data, pixelBuffer, area*componentsPerPixel);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGImageRef image = CGBitmapContextCreateImage(gtx);
CGContextTranslateCTM(currentContext, 0, screenHeight);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CGContextDrawImage(currentContext, currentSubrect, image);

1 个答案:

答案 0 :(得分:0)

基于我的所有研究,使用drawrect频繁/重复绘制是一个坏主意所以我决定转向基于UIImageView的绘图,正如对其他SO question

的回复中所建议的那样

这是另一个关于为什么UIImageView比drawrect更有效的答案。

基于以上所述,我现在使用的是UIImageView而不是drawrect,我看到了更好的绘图性能。