2010-05-20 80 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 

并解开了这个谜。