我使用RGBA
和CGBitmapContextCreate
将CGContextDrawImage
数据绘制到屏幕上。当我尝试使用bitmapcontext
(CGBitmapContextCreate
,...)创建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);
答案 0 :(得分:0)
基于我的所有研究,使用drawrect频繁/重复绘制是一个坏主意所以我决定转向基于UIImageView的绘图,正如对其他SO question
的回复中所建议的那样这是另一个关于为什么UIImageView比drawrect更有效的答案。
基于以上所述,我现在使用的是UIImageView而不是drawrect,我看到了更好的绘图性能。