グレースケールの 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 バイトはすべてゼロであることがわかりました。したがって、これは、返された画像が実際には 1804 x 1005 ではなく 1824 x 1005 の画像として返されることを意味します。理由についてはまだ説明がありません。