Длина данных, возвращаемых из CGImageGetDataProvider, больше ожидаемой - PullRequest
5 голосов
/ 20 мая 2010

Я загружаю изображение 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 Ответ

3 голосов
/ 20 мая 2010

В конце каждой строки добавляется буфер. Я начал использовать

CGImageGetBytesPerRow

и разгадал тайну.

...