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

时间:2010-05-20 04:35:05

标签: iphone iphone-sdk-3.0 image cgimage

我正在加载灰度png图像,我想访问基础像素数据。但是在我通过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图像而不是1804乘1005返回。仍然没有解释原因。

1 个答案:

答案 0 :(得分:3)

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

CGImageGetBytesPerRow

并解开了谜团。