Domanda

Sto leggendo Questo tutorial Ottenere i dati dei pixel dalla fotocamera iPhone.

Mentre non ho alcun problema in esecuzione e utilizzando questo codice, ho bisogno di prendere l'output dei dati della fotocamera (che viene fornito in BGRA) e convertilo in ARGB in modo da poterlo utilizzare con una libreria esterna.Come faccio a farlo?

È stato utile?

Soluzione

Se sei su IOS 5.0, è possibile utilizzare VImage all'interno del quadro accelerato per eseguire uno scambio di componenti a colori ottimizzato al neon utilizzando il codice come il seguente (tratto da Apple Webcore codice sorgente ):

vImage_Buffer src;
src.height = height;
src.width = width;
src.rowBytes = srcBytesPerRow;
src.data = srcRows;

vImage_Buffer dest;
dest.height = height;
dest.width = width;
dest.rowBytes = destBytesPerRow;
dest.data = destRows;

// Swap pixel channels from BGRA to RGBA.
const uint8_t map[4] = { 2, 1, 0, 3 };
vImagePermuteChannels_ARGB8888(&src, &dest, map, kvImageNoFlags);
.

Dove width, height e srcBytesPerRow sono ottenuti dal tampone pixel tramite CVPixelBufferGetWidth(), CVPixelBufferGetHeight() e CVPixelBufferGetBytesPerRow(). srcRows sarebbe il puntatore all'indirizzo base dei byte nel buffer pixel e destRows sarebbe memoria assegnata per contenere l'immagine RGBA di uscita.

Questo dovrebbe essere molto più veloce del semplice iterando sopra i byte e scambiare i componenti del colore.

A seconda della dimensione dell'immagine, una soluzione ancora più veloce sarebbe quella di caricare il telaio su OpenGL ES, rendering di un semplice rettangolo con questo come una trama e utilizzare GLReadpixel () per abbattere i valori RGBA. ANCHE MEGLIERE Sarebbe quello di utilizzare le cache di texture di IOS 5.0 per il caricamento e il download, in cui questo processo richiede solo 1-3 ms per un telaio da 720p su un iPhone 4. Ovviamente, utilizzando OpenGL ES significa molto più il codice di supporto per tirare questo spento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top