Ich lade ein Graustufen-Png-Bild und möchte auf die zugrunde liegenden Pixeldaten zugreifen. Doch nachdem ich die Pixeldaten über CGImageGetDataProvider geladen habe, ist die Länge der zurückgegebenen Daten länger als erwartet.
CCGDataProviderRef provider = CGDataProviderCreateWithFilename(cStr);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, FALSE, kCGRenderingIntentDefault);
mapWidth = CGImageGetWidth(image);
mapHeight = CGImageGetHeight(image);
lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image));
mapWidth beträgt 1804 und mapHeight beträgt 1005. Das Produkt davon ist 1813020
Wenn ich anrufe
CFDataGetLength(lookupMap)
die Antwort lautet 1833120.
Woher kommen diese zusätzlichen 20100 Bytes? Für jede Hilfe bin ich dankbar. Bin ich etwas über das zugrunde liegende Format des Bildes fehlt?
Nach weiterer Prüfung der CFDataRef fand ich, dass, wenn ich Schleife durch den Puffer, für jede Zeile die Bytes: 0 bis 1803 von meinem Bild korrekt sind, und die nächsten 20 Bytes alle Null sind. Das bedeutet also, dass mein zurückgegebenes Bild tatsächlich als 1824 x 1005 statt 1804 x 1005 zurückkommt. Ich habe immer noch keine Erklärung, warum.