在什么情况下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);
我的目标是iOS 5.0,使用5.1构建。工作版和非工作版之间的唯一区别是非工作版本尝试两次(尺寸小,小于100x100)。 只有右侧有这个问题(即第二次尝试)。第一次尝试仍然有效。
答案 0 :(得分:13)
如果size.width
和/或size.height
为0,就会发生这种情况。每次调用此方法时都会检查大小NSLog
以查看是否属于这种情况。
答案 1 :(得分:6)
对于子孙后代,如果您指定一个' bytesPerRow'它不够大,无法容纳指定的宽度。
使用Apple的https://developer.apple.com/library/ios/qa/qa1702/_index.html
示例代码我注意到返回的CVPixelBufferGetWidth(),CVPixelBufferGetHeight()和CVPixelBufferGetBytesPerRow()分别返回1280,720和1960。 ' bytesPerRow'这里的值(1960),不足以容纳1280像素宽的图像的所有字节。似乎这可能是Apple的API中的一个错误。
因此,我没有使用CVPixelBufferGetBytesPerRow()返回的值,而是使用了' width * 4',这很好用!