CGBitmapContextCreate返回NULL

bor*_*den 11 core-graphics cgbitmapcontextcreate ios

在什么情况下CGBitmapContext无法分配?我有一个表视图,它有多个视图选项.用户可以看到只有预览的小表格单元格,每行一个更大的预览,或每行两个并排预览.前两个渲染得很好,但第三个失败了.CGBitmapContextCreate没有错误消息,只是在我尝试使用它时出现错误(即无效的上下文0x0).

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//size is a passed parameter
CGContextRef c = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaNoneSkipLast);
CGColorSpaceRelease(colorSpace);
Run Code Online (Sandbox Code Playgroud)

我的目标是iOS 5.0,使用5.1构建.工作版和非工作版之间的唯一区别是非工作版本尝试两次(尺寸小,小于100x100). 只有右侧有这个问题(即第二次尝试).第一次尝试仍然有效.

gra*_*ver 13

如果size.width和/或是size.height0,则会发生NSLog这种情况.每次调用此方法时检查大小以查看是否属于这种情况.


Tim*_*Tim 6

对于后代,如果指定的"bytesPerRow"不足以容纳指定的宽度,也会发生这种情况.

使用来自https://developer.apple.com/library/ios/qa/qa1702/_index.html的 Apple示例代码

我注意到返回的CVPixelBufferGetWidth(),CVPixelBufferGetHeight()和CVPixelBufferGetBytesPerRow()分别返回1280,720和1960.这里的'bytesPerRow'值(1960),不足以容纳1280像素宽的图像的所有字节.似乎这可能是Apple的API中的一个错误.

所以我没有使用CVPixelBufferGetBytesPerRow()返回的值,而是使用'width*4',这很好用!