5 Stimmen

Länge der von CGImageGetDataProvider zurückgegebenen Daten ist größer als erwartet

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.

3voto

jcoplan Punkte 81

Am Ende jeder meiner Zeilen wird ein Puffer hinzugefügt. Ich begann mit

CGImageGetBytesPerRow

und löste das Rätsel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X