2009-07-08 9 views
4

Ich versuche, ein UIImage aus einem Bytearray zu erstellen, das tatsächlich in einem NSString gehalten wird.UIImage von in NSString gehaltenen Bytes

Kann mir bitte jemand sagen, wie ich das machen kann?

Hier ist, was ich zu tun, dachte:

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]; 

Das Problem ist Bild immer 0x0 ist (Null).

Irgendwelche Vorschläge würden geschätzt.

Danke!

Antwort

13

Um ein Bild in einen String zu konvertieren, benötigen Sie eine Methode, um NSData in einen base64Encoded String und zurück zu konvertieren (viele Beispiele here). Die leichtesten zu verwenden sind Kategorien auf NSData so können Sie etwas tun:

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

Um den anderen Weg gehen Sie einen Reverse-Konverter benötigen:

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

Danke. Der zweite Teil Ihrer Antwort ist genau das, wonach ich gesucht habe. – nicktmro

+0

base64Encoding ist keine verfügbare Methode für NSData mehr –

0

[UIImage imageWithData:data]; wird Null zurückgeben, wenn es die Daten nicht versteht, die an es übergeben werden. Ich würde Ihre Codierung usw. überprüfen. Es ist seltsam, dass eine binäre Zeichenfolge reine Bilddaten ohne irgendeine Art von Codierung (base64 usw.) enthält. String-Codierungen und binäre Codierungen sind nicht kompatibel.

0

ich Ihre Bilddaten Wette hat einige null Zeichen in dort (0x00) und wie Sie wissen, dass der Terminator für die Zeichenfolge ist, wenn Sie also nach der C-Zeichenfolge fragen, erhalten Sie wahrscheinlich viel zu wenig Daten.

Versuchen Sie etwas wie - (NSData *) dataUsingEncoding: (NSStringEncoding) Codierung; um Ihre NSData zu generieren.

Wenn das nicht funktioniert, müssen Sie bewerten, ob die Einstellung der Daten in einen NSString (mit eingebetteten Null-Zeichen) auch keinen Datenverlust verursacht.

Wie einer der anderen Befragten, vielleicht Base64-Daten codieren, wäre eine gute Idee sein (wenn eine Zeichenfolge mit dem img Daten zu transportieren ist eine Anforderung)

Viel Glück.