2010-10-03 12 views
14

Quando si crea un UIImage con i dati corrotti/incompleti JPEG, la console sarà stampareCatching errore: Corrupt dati JPEG: fine prematura del segmento di dati

<Error>: Corrupt JPEG data: premature end of data segment

L'immagine incompleta verrà mostrato, con ripieno di grigio la parte incompleta. Non voglio che ciò accada.

Ho provato disperatamente con un blocco try-catch ma non rileva l'errore. C'è un modo per cogliere l'errore?

risposta

13

dipende da come si stanno ottenendo i dati, ecc Forse questo è quello che stai cercando: iphone-corrupt-jpeg-data-for-image-received-over-http

Un modo semplice per controllare se i dati JPEG è completa o non è quello di controllare i primi e gli ultimi due byte per FF D8 e FF D9 rispettivamente. Questi due byte identificano rispettivamente l'inizio e la fine di un file JPEG.

+1

Questo potrebbe funzionare come una soluzione per il mio scopo. Ma sono ancora curioso di sapere come si possa cogliere l'errore. – samwize

+1

I primi 2 byte dovrebbero essere FF D8 – samwize

+1

, quindi se ho il JPG rappresentato come NSData dal disco iOS come potrei controllare le ultime 2 cifre? – Slee

23

In risposta alla domanda di Slee sopra, questo è il metodo che uso:

-(BOOL)dataIsValidJPEG:(NSData *)data 
{ 
    if (!data || data.length < 2) return NO; 

    NSInteger totalBytes = data.length; 
    const char *bytes = (const char*)[data bytes]; 

    return (bytes[0] == (char)0xff && 
      bytes[1] == (char)0xd8 && 
      bytes[totalBytes-2] == (char)0xff && 
      bytes[totalBytes-1] == (char)0xd9); 
} 
+1

+1 Grazie per lo snippet di codice modulare! – Jean

+0

+1 Fantastico! funziona alla grande, grazie – avishic

+0

Grazie, gr8 lavoro! –

Problemi correlati