从CGImageGetDataProvider返回的数据长度大于预期

jco*_*lan 5 iphone image cgimage iphone-sdk-3.0

我正在加载灰度png图像,我想访问基础像素数据.然而,在我通过CGImageGetDataProvider加载获取像素数据后,返回的数据长度超过预期.

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

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

lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image));
Run Code Online (Sandbox Code Playgroud)

mapWidth出现在1804,mapHeight出现在1005.其产品是1813020

我打电话的时候

CFDataGetLength(lookupMap)
Run Code Online (Sandbox Code Playgroud)

回复是1833120.

这些额外的20100字节来自哪里?这里的任何帮助非常感谢.我错过了关于图像底层格式的一些内容吗?

在进一步检查CFDataRef时,我发现如果我遍历缓冲区,对于每一行字节:0到1803将从我的图像中正确,然后接下来的20个字节全部为零.所以这意味着我的返回图像实际上是以1824×1005图像而不是1804乘1005返回.仍然没有解释为什么.

jco*_*lan 3

我的每一行的末尾都添加了一个缓冲区。我开始使用

CGImageGetBytesPerRow
Run Code Online (Sandbox Code Playgroud)

并解开了谜团。