将来自Web服务的字节数组转换为UIImage iPhone
我不熟悉这项技术。 我找了很多,但找不到任何相关的。 在我的应用程序中,我从web服务接收字节数组,我从web服务接收的字节数组是 [137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1195,0,0,1195,8,2,0,0,0215,2…]将来自Web服务的字节数组转换为UIImage iPhone,iphone,objective-c,web-services,Iphone,Objective C,Web Services,我不熟悉这项技术。 我找了很多,但找不到任何相关的。 在我的应用程序中,我从web服务接收字节数组,我从web服务接收的字节数组是 [137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1195,0,0,1195,8,2,0,0,0215,2…] 我想将这个字节数组转换成UIImage,以便在UIImageView中显示它使用下面的UIImage构造函数 + (UIImage *)imageWithData:(NSData *)data; N
我想将这个字节数组转换成UIImage,以便在UIImageView中显示它使用下面的UIImage构造函数
+ (UIImage *)imageWithData:(NSData *)data;
NSData *data = [NSData dataWithBytes:YOUR_BYTE_ARRAY length:ARRAY_LENGTH];
UIImage *img = [UIImage imageWithData:data];
UIImageView *imgView = [[UIImageView alloc]initWithImage:img];
也许它会帮助你 首先需要对数据进行Base64解码。从许多SOAPWeb服务返回的数据是Base64编码的,有时也包括嵌入网站中的原始数据。这很简单,但使用别人创建的库却很容易 首先,在项目中包含该文件,并在此文件中包含.h:
应该这样做。在我以前的经验中,我只是将通过Web服务获得的所有数据块放入一个字符串中,然后使用此方法创建图像,效果非常好。这里对Base64编码和解码的细节进行了大量讨论:这是我用来创建类的内容,但Nick在gitHub上的代码比它的ARC兼容的代码要好得多 上面字节数组中的前8个字节,
\211 p N G\r\N\032\N
(或137,80,78,71,13,10,26,10
),显示这是一个文件
#import "NSDataAdditions.h"
NSData *dataObj = [NSData dataWithBase64EncodedString:StringImage];
UIImage *Image = [UIImage imageWithData:dataObj];
至少,您应该能够将整个字节序列保存到一个文件中,并使用+(UIImage*)imageNamed:(NSString*)name
或+(UIImage*)imageWithContentsOfFile:(NSString*)path
加载它。例如:
UIImage *myImage = [UIImage imageNamed:@"myfile.png"]
// myfile.png should be in the main bundle
(由于这个原因,Apurv的方法更直接,也更好。但由于您在这方面遇到了困难,我想我建议使用一种稍微不同的方法。)从Webservice我们获得了一系列的
NSNumber
。我们必须将其转换为NSData
,如下所示:
NSMutableData *data = [[NSMutableData alloc] initWithCapacity: [strings count]];
for( NSNumber *number in strings) {
char byte = [number charValue];
[data appendBytes: &byte length: 1];
}
将NSData转换为UIImage:
UIImage *imageOrig = [UIImage imageWithData:data];
我们还从NSData
中获取JSON
NSError *error1 = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error1];
if (error1 != nil) {
NSLog(@"Error parsing JSON.");
} else {
NSLog(@"Array: %@", jsonArray);
}
感谢您的回复,但它不起作用,请提供任何其他建议。您可以将字节[]转换为NSData吗?字节byteData=(字节)malloc(len);memcpy(字节数据,[数据字节],len);这样说吗?NSData*data=[NSData dataWithBytes:(const void*)字节长度:(NSUInteger)长度];现在,在imageWithData中使用此数据,如答案中所述。我是从web服务获取的,我不知道如何获取(const void*)你能帮我把我从web服务接收到的数据转换成你的字节数组吗?也就是说,字节数组你从web服务接收到的字节数组如果不是,那么你从web服务接收到的是什么我正在做这样的事情,对吗?CGContextRef bitmapContext=CGBitmapContextCreate((u桥空*)[arr valueForKey:@“ImageData”]、250.0、250.0、8、4*250.0、颜色空间、KCGimageAlphaPremultipledLast | kCGBitmapByteOrderDefault);使用这一个CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();CGContextRef bitmapContext=CGBitmapContextCreate([arr valueForKey:@“ImageData”],50.0,50.0100100.0,颜色空间,KCGIMAGEAlphaPremultipledLast | kCGBitmapByteOrderDefault);CFRelease(色彩空间);CGImageRef cgImage=CGBitmapContextCreateImage(bitmapContext);CGContextRelease(bitmapContext);UIImage*newimage=[UIImage imageWithCGImage:cgImage];[yourImageView设置图像:新建图像];CGImageRelease(cgImage);这给了我一个错误,因为将Objective-C指针类型“id”隐式转换为C指针类型“void*”需要对[arr valueForKey:@“ImageData”]进行桥接转换,以便帮助您了解您从web服务接收到的确切信息非常重要。它是
NSArray
的一个实例吗?如果是,这个数组中有什么<代码>NSNumber,NSString
?请对您的问题进行更详细的描述。我已经在我的问题中提到了我从web服务得到的响应,[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68…]。我接收到的数据是字节数组,即数组的一种类型,我希望将此字节数组转换为UIImageIt是void*指针吗?显然不是,否则-dataWithBytes:就可以正常工作。没有更多的代码,没有人会帮助你。添加您在问题中检索字节数组的代码。我已经实现了Apurv下面给出的代码,但它不起作用,它给了我错误,我正在应用程序中使用ARC。正如我所说,使用从web服务获取字节数组的代码更新您的问题。方法dataWithBase64EncodedString:
不会出现在中。此方法可能是您已实现的onNSData
的一部分。因此,如果不知道/不具备dataWithBase64EncodedString:
的实现,上面的代码片段就不是很有用。使用有限的字符集,通常是(26+26+10=62)字母数字字符以及“+”和“/”。原始海报提供的示例字节数组具有一些大于127的十进制值,例如137、195和215;这表明它甚至不是7位ASCII,更不用说base64了。
UIImage *imageOrig = [UIImage imageWithData:data];
NSError *error1 = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error1];
if (error1 != nil) {
NSLog(@"Error parsing JSON.");
} else {
NSLog(@"Array: %@", jsonArray);
}