2010-05-20 2 views
5

Я загружаю черно-белое изображение PNG, и я хочу получить доступ к базовым данным пикселя. Однако после загрузки данных пикселя через CGImageGetDataProvider длина возвращаемых данных больше, чем ожидалось.Длина данных, возвращаемых из 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. По-прежнему нет объяснений, почему.

ответ

3

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

CGImageGetBytesPerRow 

и решить загадку.

Смежные вопросы