2012-06-05 34 views
10

在什麼情況下CGBitmapContext無法分配?我有一個表格視圖,它有多個視圖選項。用戶可以看到只有預覽的小表格單元,每行一個較大的預覽,或者每行兩個並排預覽。前兩個呈現很好,但第三個失敗。沒有來自CGBitmapContextCreate的錯誤消息,只是當我嘗試使用它時發生錯誤(即無效的上下文0x0)。CGBitmapContextCreate返回NULL

​​

我針對的iOS 5.0,建設與5.1。工作與非工作版本之間的唯一區別是非工作版本會嘗試執行兩次(大小很小,小於100x100)。 只有右側有這個問題(即第二次嘗試)。第一次嘗試仍然有效。

回答

13

如果size.width和/或size.height爲0,則可能發生這種情況。請在每次調用此方法時檢查尺寸,看看是否屬於這種情況。

+1

啊,非常好。我以爲我檢查了這些,但顯然不夠好。其中一些實際上是0.做得好,謝謝! – borrrden

4

對於後代,如果您指定的'bytesPerRow'不夠大以容納指定的寬度,也會發生這種情況。

使用蘋果的示例代碼https://developer.apple.com/library/ios/qa/qa1702/_index.html

我注意到,CVPixelBufferGetWidth(),CVPixelBufferGetHeight(),和CVPixelBufferGetBytesPerRow()返回分別返回1280,720,和1960年。這裏的'bytesPerRow'值(1960)不足以容納1280像素寬的圖像的所有字節。似乎這可能是Apple API中的一個錯誤。

因此,我使用'寬* 4',而不是使用由CVPixelBufferGetBytesPerRow()返回的值,這工作得很好!

+1

感謝您的額外信息!就像一個小小的警告一樣,只要您使用RGBA或類似的每像素4字節模型,它就只會是寬度* 4。此外,你提到的數字不是一個錯誤。該函數在硬件上返回每行使用的正確字節數*(不一定在內存中正確)。它在[這裏]討論(https://developer.apple.com/library/ios/qa/qa1829/_index.html) – borrrden