Ich lade ein Graustufen-PNG-Bild und möchte auf die darunterliegenden Pixeldaten zugreifen. Nachdem ich jedoch die Pixeldaten über CGImageGetDataProvider geladen habe, ist die Länge der zurückgegebenen Daten länger als erwartet.Die Länge der von CGImageGetDataProvider zurückgegebenen Daten ist größer als erwartet
CCGDataProviderRef provider = CGDataProviderCreateWithFilename(cStr);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, FALSE, kCGRenderingIntentDefault);
mapWidth = CGImageGetWidth(image);
mapHeight = CGImageGetHeight(image);
lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image));
mapWidth aus dem Jahre 1804 stammt und mapHeight kommt auf 1005. Das Produkt von denen 1.813.020 ist
Als ich
CFDataGetLength(lookupMap)
die Antwort nennen, ist 1833120.
Wo kommen diese zusätzlichen 20100 Bytes? Jede Hilfe hier wird sehr geschätzt. Fehle ich etwas über das zugrunde liegende Format des Bildes?
Nach weiteren Überprüfung der CFDataRef fand ich, dass, wenn ich den Puffer durchlaufen, für jede Zeile Bytes: 0 bis 1803 wird korrekt von meinem Bild, und dann die nächsten 20 Bytes sind alle Null. Das bedeutet also, dass mein zurückgegebenes Bild tatsächlich als Bild von 1824 mal 1005 statt 1804 mal 1005 zurückkommt. Noch immer keine Erklärung, warum.