0

我在将 NSString 转换为 UIImage 时遇到问题。EDIT1:我正在从 gtalk 服务器下载照片作为字符串并解析 xml 5896efb83a92deaee41a30648cc9dbf7e9942b0e 以用作图像。

    NSString *myPicture = [存在照片];
    NSData *pic = nil;

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

    UIImage *图片;

    NSLog(@"照片%@", pic);

    如果(图片==零){
        图片 = [UIImage imageWithData:[Utils getAvatar]];
    }

    别的 {
        图片 = [UIImage imageWithData:pic];
    }
    NSLog(@"图片%@", 图片);

日志

照片 35383936 65666238 33613932 64656165 65343161 33303634 38636339 64626637 65393934 32623065
图片(空)

有的部分

图片 = [UIImage imageWithData:[Utils getAvatar]]
工作正常

任何想法?

4

2 回答 2

1

从问题中不清楚您要做什么。

将图片存储为字符串没有标准约定,因此您需要解释 [presence photo] 返回的格式。

例如,如果字符串包含图像的文件名,这是完全错误的方法,您应该使用 initWithContentsOfFile 加载图像。如果它包含 base-64 编码的 URL,则需要使用 Base64 解码算法等将其解码为数据。

如果字符串只是原始二进制图像数据,那么这是一件非常奇怪的事情,因为 NSString 不是用于存储原始二进制数据并且可能不能以这种方式使用,但如果这是你正在做的,那么数据最可能需要使用 UTF16 而不是 UTF8 进行转换,因为这是 NSStrings 的自然内部编码。

编辑:从您的后续编辑中,看起来您的字符串是十六进制编码的,因此您需要使用十六进制解码器将其转换为数据。这里有一个关于如何做到这一点的答案:

在Objective C(可可)中将十六进制数据字符串转换为NSData

之后,您可能仍需要进行进一步处理,具体取决于数据的格式(例如 PNG 与 JPEG),但请尝试将解码后的数据传递给 intWithData 并查看您的进展情况。

于 2012-04-16T12:33:35.620 回答
0

希望对你有所帮助。

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