Domanda

Sto cercando di creare un UIImage da un array di byte che in realtà è tenuto all'interno di un NSString.

Qualcuno può dirmi come posso farlo?

Ecco quello che stavo pensando di fare:

NSString *sourceString = @"mYActualBytesAREinHERe=";
//get the bytes
const char *bytesArray = [sourceString cStringUsingEncoding:NSASCIIStringEncoding];
//build the NSData object
NSData *data = [NSData dataWithBytes:bytesArray length:[sourceString length]];
//create actual image
UIImage *image = [UIImage imageWithData:data];

Il problema è immagine è sempre 0x0 (zero).

Tutti i suggerimenti sarebbero apprezzati.

Grazie!

È stato utile?

Soluzione

Per convertire un'immagine a stringa avete bisogno di un metodo per convertire NSData in una stringa base64Encoded e ritorno (un sacco di esempi qui ). I più semplici da usare sono categorie su NSData in modo da poter fare qualcosa di simile:

UIImage* pic = [UIImage imageNamed:@"sample.png"];
NSData* pictureData = UIImagePNGRepresentation(pic);
NSString* pictureDataString = [pictureData base64Encoding];

Per andare dall'altra parte è necessario un convertitore inverso:

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];

Altri suggerimenti

[UIImage imageWithData:data]; tornerà a zero se non capisce i dati che vengono passati ad esso. Avrei doppio controllo la codifica, ecc E 'strano che una stringa binaria terrebbe i dati delle immagini puri senza un qualche tipo di codifica (base64, etc.). codifiche stringa e codifiche binarie non sono compatibili.

Scommetto i dati immagine ha alcuni caratteri nulli in là (0x00) e come si sa che è il terminatore per la stringa, in modo che quando si chiede per la stringa C, è probabilmente ottenere via a senso troppo pochi dati.

Provare qualcosa di simile - (NSData *) dataUsingEncoding: encoding (NSStringEncoding); per generare il NSData.

Se questo non dovesse funzionare è necessario valutare se l'impostazione dei dati in un NSString (con caratteri nulli incorporati) non è causando una perdita di dati anche.

Come uno degli altri intervistati, forse in base 64 codifica dei dati sarebbe una buona idea (se si utilizza una stringa per trasportare i dati IMG è un requisito)

In bocca al lupo.

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