在什么情况下,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)。只有右边有这个问题(即第二次尝试)。第一次尝试仍然有效。
发布于 2012-06-05 10:01:55
如果size.width和/或size.height为0,则可能发生这种情况。每次调用这个方法时,都要放置一个NSLog来检查大小,看看是否是这样。
发布于 2015-09-02 18:27:44
对于后代来说,如果您指定的“bytesPerRow”不足以容纳指定的宽度,也可能发生这种情况。
使用来自https://developer.apple.com/library/ios/qa/qa1702/_index.html的苹果示例代码
我注意到返回的CVPixelBufferGetWidth()、CVPixelBufferGetHeight()和CVPixelBufferGetBytesPerRow()分别返回1280、720和1960。此处的“bytesPerRow”值(1960年)不足以容纳1280像素宽的图像的所有字节。看起来这可能是苹果API中的一个bug。
因此,我没有使用CVPixelBufferGetBytesPerRow()返回的值,而是使用了“width*4”,这很好!
https://stackoverflow.com/questions/10895160
复制相似问题