5

グレースケールの 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 の画像として返されることを意味します。理由についてはまだ説明がありません。

4

1 に答える 1

3

各行の最後にバッファが追加されています。使い始めました

CGImageGetBytesPerRow

そして謎を解いた。

于 2010-05-20T15:43:32.023 に答える