12

什么情况下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)。 只有右边有这个问题(即第二次尝试)。第一次尝试仍然有效。

4

2 回答 2

14

如果size.width和/或为 0,则可能发生这种情况。每次调用此方法时,请使用size.heighta来检查大小,看看是否是这种情况。NSLog

于 2012-06-05T10:01:55.237 回答
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”,这很好用!

于 2015-09-02T18:27:44.857 回答