2013-04-10 9 views
11

Sto convertendo le immagini in un file MOV e mi è successo qualcosa di interessante. Ho registrato i miei bit per componente di colore, bit per pixel e byte per riga. Qui è il mio codice:Perché i byte della mia immagine per riga sono più lunghi dei byte per pixel per larghezza?

NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image)); 
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image)); 

Ecco la mia uscita:

immagine Larghezza: 300, Altezza: 300 (come previsto del tutto) BPC: 8 (8 bit per colore ... finora tutto bene) BPP: 32 (32 = 4 componenti ARGB * 8 bit per colore ... capito) ByPR: 1216 (300 px per riga * 4 byte per pixel = 1200 byte per riga)

Perché ho registrato 1216 byte per riga e non 1200? A proposito, questo non è solo un colpo di fortuna. Quando creo un video basato su quei numeri per le dimensioni del buffer, funziona. Quando lo creo con 1200 byte per riga, ottengo un effetto di aliasing incasinato.

Pensieri ?!

+0

In realtà ho bisogno di fare la stessa cosa. Puoi darmi il codice che converte le immagini in mov? Va bene se non puoi. La mia email è [email protected] Sarebbe molto grato. – anivader

+0

Ho esigenze leggermente diverse: nuovo rene e denaro. Qualsiasi importo. Sarebbe bello poterlo condividere. Tha-a-anks! –

risposta

19

Al sistema le immagini sono un multiplo di 64 byte per riga, presumibilmente per prestazioni migliori a causa dell'allineamento della linea della cache. 1200 non è un multiplo di 64, ma è 1216.

+0

Interessante ... qualsiasi motivo per cui, o è abbastanza arbitrario? È solo questione di facilitare l'allocazione dei buffer? Inoltre, hai qualche documentazione che potrebbe indicarlo specificamente per CGImage? Grazie! – Herm

+1

Come ho detto, presumo che sia dovuto al comportamento della linea della cache. La CPU carica sempre un'intera linea di cache contemporaneamente. Non ricordo alcuna documentazione per indicarti. –

+0

C'è un modo per impedirgli di farlo? Posso impostare il mio bytesperrow? – anivader

Problemi correlati