0

NSString を UIImage に変換する際に問題に直面しています。EDIT1:gtalkサーバーから写真を文字列としてダウンロードし、xml 5896efb83a92deaee41a30648cc9dbf7e9942b0eを解析して画像として使用しています。

    NSString *myPicture = [プレゼンス写真];
    NSData *pic = nil;

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

    UIImage *画像;

    NSLog(@"写真 %@", pic);

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

    そうしないと {
        画像 = [UIImage imageWithData:pic];
    }
    NSLog(@"画像 %@", 画像);

ログ

写真 35383936 65666238 33613932 64656165 65343161 33303634 38636339 64626637 65393934 32623065
画像 (ヌル)

のある部分

picture = [UIImage imageWithData:[Utils getAvatar]]
正常に動作します

何か案が?

4

2 に答える 2

1

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

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

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

文字列が生のバイナリイメージデータである場合、NSStringは生のバイナリデータを格納することを目的としておらず、おそらくこの方法では使用できないため、これは非常に奇妙なことですが、それがあなたが行っていることである場合、データはほとんどNSStringの自然な内部エンコーディングであるため、UTF8ではなくUTF16を使用して変換する必要がある可能性があります。

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

Objective C(ココア)で16進データ文字列をNSDataに変換する

その後、データの形式(PNGとJPEGなど)によっては、さらに処理を行う必要がある場合がありますが、デコードされたデータをintWithDataに渡して、どのように処理するかを確認してください。

于 2012-04-16T12:33:35.620 に答える
0

お役に立てば幸いです。

picture = [[UIImage alloc] initWithData:pic];
于 2012-04-16T14:23:14.127 に答える