Я загружаю шкалу полутонов 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 выходит к 1 005. Продукт которого 1813020
Когда я звоню
CFDataGetLength(lookupMap)
ответ 1833120.
Куда эти дополнительные 20 100 байтов прибывают из? Любая справка здесь очень ценится. Я пропускаю что-то о базовом формате изображения?
После дальнейшего исследования CFDataRef я нашел это, если я циклично выполняюсь через буфер для каждой строки байты: от 0 до 1803 будет корректно из моего изображения, и затем следующие 20 байтов являются всем нулем. Таким образом, это означает, что мое возвращенное изображение на самом деле возвращается как 1824 1 005 изображениями вместо 1804 1 005. Все еще никакое объяснение, относительно почему.
В конец каждой из моих строк добавляется буфер. Я начал использовать
CGImageGetBytesPerRow
и разгадал загадку.