2012-04-16 11 views
0

NSStringをUIImageに変換する際に問題が発生しています。 EDIT1: 私はgtalkサーバーから文字列として写真をダウンロードしています。画像として使用するには、5896efb83a92deaee41a30648cc9dbf7e9942b0eを解析しました。NSString to 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

+0

完全にランダムな一連のバイトからイメージを作成する予定ですか?あなたは何を正確に達成しようとしていますか? – Perception

答えて

1

質問から、あなたがしようとしていることは明らかではありません。

写真を文字列として保存するための標準的な規則はないため、[存在写真]が返す形式を説明する必要があります。

たとえば、文字列にイメージのファイル名が含まれている場合、これは完全に間違った方法であり、initWithContentsOfFileでイメージをロードする必要があります。 Base64でエンコードされたURLが含まれている場合は、Base64デコードアルゴリズムなどを使用してそのデータをデコードする必要があります。

文字列が生のバイナリイメージデータの場合、NSString生のバイナリデータを格納するためのものではなく、おそらくこのように使用することはできませんが、もしそれがあなたの行っているものなら、UTF8ではなくUTF16を使ってデータを変換する必要があります。

EDIT:フォローアップ編集から、文字列が16進数でエンコードされているように見えるため、16進デコーダを使用してデータに変換する必要があります。ここでこれを行う方法についての答えがあります:

その後

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

、あなたはまだデータ(例えばPNG対JPEG)であるどのような形式に応じて、さらに処理を行う必要があるかもしれませんが、合格してみてくださいintWithDataにデコードされたデータを取得し、どのように乗っているかを確認します。

+0

このアプローチは妥当と聞こえるので、試しましたが、結果は同じです。とにかくありがとうございました。 – Vanya

+0

私はあなたがgtalkイメージデータのフォーマットについてもう少し調べる必要があると思います。 –

0

あなたに役立つと思います。

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