2012-04-16 48 views
0

我面臨一個問題,將NSString轉換爲UIImage。 編輯1: 我正在下載照片作爲字符串從GTalk服務器和分析的XML 5896efb83a92deaee41a30648cc9dbf7e9942b0e作爲圖像使用。NSString到UIImage

 
    NSString *myPicture = [presence photo]; 
    NSData *pic = nil; 

    if (![myPicture isEqualToString:@""]) { 
     pic = [myPicture dataUsingEncoding:NSUTF8StringEncoding]; 
    } 

    UIImage *picture; 

    NSLog(@"Photo %@", pic); 

    if (pic == nil) { 
     picture = [UIImage imageWithData:[Utils getAvatar]]; 
    } 

    else { 
     picture = [UIImage imageWithData:pic]; 
    } 
    NSLog(@"Picture %@", picture); 

日誌

 
Photo 35383936 65666238 33613932 64656165 65343161 33303634 38636339 64626637 65393934 32623065 
Picture (null) 

picture = [UIImage imageWithData:[Utils getAvatar]]
的部分工作正常

任何想法?

+1

它只是沒有意義。你想在裏面畫一個「UIImage」嗎? – Costique 2012-04-16 12:30:24

+0

你期望一個圖像是由完全隨機的字節序列創建的嗎?你想要完成什麼? – Perception 2012-04-16 12:31:03

回答

1

從問題中不清楚你試圖做什麼。

沒有將圖片存儲爲字符串的標準約定,因此您需要說明[存在照片]返回的格式。

例如,如果字符串包含圖像的文件名,這完全是錯誤的方法,您應該使用initWithContentsOfFile加載圖像。如果它包含base-64編碼的URL,則需要使用Base64解碼算法將其解碼爲數據。

如果字符串只是原始二進制圖像數據,那麼這是非常奇怪的事情,因爲NSString不適用於存儲原始二進制數據,並且可能無法以此方式使用,但如果它是您正在做的事情,那麼數據很可能需要使用UTF16而不是UTF8進行轉換,因爲這是NSStrings的自然內部編碼。

編輯:從你的後續編輯,它看​​起來像你的字符串是十六進制編碼,所以你需要使用十六進制解碼器將其轉換爲數據。有一個關於如何做到這一點這裏的答案:

Convert hex data string to NSData in Objective C (cocoa)

之後,你可能仍然需要做進一步的處理,這取決於什麼格式的數據是(例如,PNG與JPEG),但嘗試傳遞解碼數據到intWithData,看看你如何繼續。

+0

這種方法聽起來很合理,所以我試過了,但結果是一樣的。不管怎樣,謝謝你。 – Vanya 2012-04-16 14:12:31

+0

我想你需要更多地瞭解一下gtalk圖像數據的格式。 – 2012-04-16 14:50:42

0

希望對你有幫助。

picture = [[UIImage alloc] initWithData:pic];