2010-05-20 111 views
5

我正在加載一個灰度PNG圖像,我想訪問底層像素數據。然而,在我通過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個字節全部爲零。所以這意味着我返回的圖像實際上是作爲一個1824乘1005的圖像而不是1805乘1005而返回。仍然沒有解釋爲什麼。

回答

3

有一個緩衝區被添加到我的每一行的末尾。 我開始使用

CGImageGetBytesPerRow 

並解開了這個謎。