2012-06-05 12 views
10

किन परिस्थितियों एक CGBitmapContext आवंटित करने के लिए असफल हो जायेगी तहत? मेरे पास एक टेबल व्यू है, और इसमें कई दृश्य विकल्प हैं। उपयोगकर्ता केवल पूर्वावलोकन के साथ एक छोटा टेबल सेल देख सकता है, प्रति पंक्ति एक बड़ा पूर्वावलोकन, या प्रति पंक्ति साइड पूर्वावलोकन के साथ दो तरफ। पहले दो ठीक ठीक है, लेकिन तीसरा एक विफल रहता है। CGBitmapContextCreate से कोई त्रुटि संदेश नहीं है, जब मैं इसे उपयोग करने का प्रयास करता हूं तो बस त्रुटियां (यानी अमान्य संदर्भ 0x0)।CGBitmapContextCreate रिटर्न शून्य

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

मैं आईओएस 5.0 को लक्षित कर रहा हूं, 5.1 के साथ बिल्डिंग। काम करने वाले और गैर-वर्किंग संस्करण के बीच एकमात्र अंतर यह है कि गैर-कार्यशील संस्करण इसे दो बार करने का प्रयास करता है (आकार छोटा है, 100x100 से कम)। केवल दाहिने तरफ इस समस्या है (यानी दूसरा प्रयास)। पहला प्रयास अभी भी काम करता है।

उत्तर

13

यह हो सकता है यदि size.width और/या size.height 0 है। NSLog प्रत्येक बार जब आप इस विधि को यह देखने के लिए कहते हैं कि यह मामला है तो यह जांचने के लिए NSLog रखें।

+1

आह, उत्कृष्ट। मैंने सोचा कि मैंने उनको चेक किया है, लेकिन स्पष्ट रूप से पर्याप्त नहीं है। उनमें से कुछ वास्तव में, 0 थे। अच्छा किया, धन्यवाद !! – borrrden

4

भावी पीढ़ी के लिए, यह भी अगर आप एक 'bytesPerRow' है कि इतना बड़ा निर्दिष्ट चौड़ाई समायोजित करने के लिए नहीं है निर्दिष्ट हो सकता है।

https://developer.apple.com/library/ios/qa/qa1702/_index.html

से एप्पल के नमूना कोड का उपयोग करते हुए मैंने देखा है कि CVPixelBufferGetWidth(), CVPixelBufferGetHeight(), और CVPixelBufferGetBytesPerRow() लौट आए क्रमश: 1280, 720 और 1960 लौट रहे थे। यहां 'बाइट्सप्रोरो' मान (1 9 60), 1280 पिक्सेल चौड़े छवि के लिए सभी बाइट्स को पकड़ने के लिए पर्याप्त नहीं है। ऐसा लगता है कि यह शायद ऐप्पल के एपीआई में एक बग है।

तो CVPixelBufferGetBytesPerRow() द्वारा दिए गए मान उपयोग करने के बजाय, मैं 'चौड़ाई * 4' का इस्तेमाल किया है, और यह ठीक काम किया!

+1

अतिरिक्त जानकारी के लिए धन्यवाद! एक छोटी सी चेतावनी के रूप में यह केवल चौड़ाई * 4 होगी जब तक आप एक आरजीबीए या समान 4 बाइट प्रति पिक्सेल मॉडल का उपयोग कर रहे हों। साथ ही, आपके द्वारा उल्लेख की गई संख्या एक बग नहीं है। वह फ़ंक्शन हार्डवेयर पर * प्रति पंक्ति * बाइट्स की सही संख्या देता है * (स्मृति में आवश्यक रूप से सही नहीं)। इस पर चर्चा की गई है [यहां] (https://developer.apple.com/library/ios/qa/qa1829/_index.html) – borrrden

संबंधित मुद्दे