che sto caricando this (very small) image utilizzando:Come determinare ed interpretare il formato di pixel di un CGImage
UIImage* image = [UIImage named:@"someFile.png"];
L'immagine è 4x1 e contiene un pixel rosso, verde, blu e bianco da sinistra a destra, in quell'ordine
Avanti, ottengo i dati dei pixel dal CGImage sottostante:
NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
Ora, per qualche ragione, i dati di pixel è disposto in modo diverso a seconda del dispositivo iOS.
Quando eseguo l'applicazione nel simulatore o sul mio iPhone 4, i dati dei pixel si presenta così:
(255,0,0), (0,255,0), (0,0,255), (255,255,255)
Quindi, i pixel sono 3 byte per pixel, con blu come il byte più significativo e rosso come il meno significativo. Quindi immagino che chiami BGR?
Quando controllo CGBitmapInfo, posso vedere che kCGBitmapByteOrderMask è kCGBitmapByteOrderDefault. Non riesco a trovare da nessuna parte che spiega cosa sia "predefinito".
D'altra parte, quando l'eseguo sulla mia prima generazione iPhone, i dati dei pixel si presenta così:
(0,0,255,255), (0,255,0,255), (255,0,0,255), (255,255,255,255)
Quindi 4 byte per canale, alfa come il byte più significativo e blu come il meno significativo. Quindi ... si chiama ARGB?
Ho cercato CGBitmapInfo per capire come rilevare il layout. Sul primo iPhone di gen, kCGBitmapAlphaInfoMask è kCGImageAlphaNoneSkipFirst. Ciò significa che i bit più significativi vengono ignorati. Quindi ha senso. Sul primo iPhone di gen il kCGBitmapByteOrderMask è kCGBitmapByteOrder32Little. Non so cosa significhi o come relazionarlo a come i componenti R, G e B sono disposti in memoria. Qualcuno può far luce su questo?
Grazie.
Questo è contrassegnato come risposta accettata, ma in realtà non risponde alla domanda. Sembra anche un po 'come martellare un chiodo con una mazza. Perché ridisegnare un'intera immagine utilizzando tutto quel codice quando tutto ciò che si vuole veramente fare è ordinare l'ordine dei byte dei dati esistenti? –
Victor, l'hai capito per caso, ovvero come gestire kCGBitmapByteOrderDefault? –