4

我正在尝试从实际保存在 NSString 中的字节数组创建 UIImage。

有人可以告诉我我该怎么做吗?

这是我想做的事情:

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

问题是图像总是 0x0 (nil)。

任何建议,将不胜感激。

谢谢!

4

3 回答 3

13

要将图像转换为字符串,您需要一种方法来转换NSData为 base64Encoded 字符串并返回(这里有很多示例)。最容易使用的是类别,NSData因此您可以执行以下操作:

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

要走另一条路,您需要一个反向转换器:

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];
于 2009-07-09T00:10:45.600 回答
0

[UIImage imageWithData:data];如果它不理解传递给它的数据,将返回 nil。我会仔细检查您的编码等。奇怪的是,二进制字符串会保存没有某种编码(base64 等)的纯图像数据。字符串编码和二进制编码不兼容。

于 2009-07-08T23:23:37.410 回答
0

我敢打赌,您的图像数据中有一些空字符(0x00),并且您知道这是字符串的终止符,因此当您询问 C 字符串时,您可能得到的数据太少了。

尝试类似 - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; 生成您的 NSData。

如果这不起作用,您需要评估将数据设置为 NSString(带有嵌入的空字符)是否也不会导致数据丢失。

像其他受访者一样,也许 base-64 编码您的数据是一个好主意(如果需要使用字符串来传输 img 数据)

祝你好运。

于 2009-11-13T17:52:17.733 回答