我正在加载灰度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返回。仍然没有解释原因。
答案 0 :(得分:3)
在我的每一行的末尾添加了一个缓冲区。 我开始使用
CGImageGetBytesPerRow
并解开了谜团。