2010-05-20 16 views
5

से बड़ी है, मैं एक ग्रेस्केल पीएनजी छवि लोड कर रहा हूं और मैं अंतर्निहित पिक्सेल डेटा तक पहुंच बनाना चाहता हूं। हालांकि जब मैं लोड करता हूं तो CGImageGetDataProvider के माध्यम से पिक्सेल डेटा प्राप्त करने के बाद, लौटाए गए डेटा की लंबाई अपेक्षा से अधिक लंबी होती है।CGImageGetDataProvider से लौटाए गए डेटा की लंबाई

CCGDataProviderRef provider = CGDataProviderCreateWithFilename(cStr); 
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, FALSE, kCGRenderingIntentDefault); 

mapWidth = CGImageGetWidth(image); 
mapHeight = CGImageGetHeight(image); 

lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image)); 

mapWidth 1804 बाहर आता है और mapHeight 1005. उत्पाद 1813020

है, जिनमें से जब मैं फोन करने के लिए बाहर आता है

CFDataGetLength(lookupMap) 

प्रतिक्रिया 1833120.

कहां है क्या ये अतिरिक्त 20100 बाइट आ रहे हैं? यहां कोई भी मदद की बहुत सराहना की जाती है। क्या मुझे छवि के अंतर्निहित प्रारूप के बारे में कुछ याद आ रहा है?

CFDataRef की आगे की परीक्षा में मैंने पाया कि यदि मैं बफर के माध्यम से लूप करता हूं, प्रत्येक पंक्ति बाइट्स के लिए: 0 से 1803 मेरी छवि से सही होगा, और फिर अगले 20 बाइट सभी शून्य होंगे। तो इसका मतलब है कि मेरी लौटाई गई छवि वास्तव में 184 के रूप में 1005 छवियों के बजाय 1804 से 1005 छवि के रूप में वापस आ रही है। फिर भी क्यों कोई स्पष्टीकरण नहीं है।

उत्तर

3

मेरी पंक्तियों में से प्रत्येक के अंत में एक बफर जोड़ा जा रहा है। मैं

CGImageGetBytesPerRow 

उपयोग शुरू किया और रहस्य सुलझ।

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