Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将来自Web服务的字节数组转换为UIImage iPhone_Iphone_Objective C_Web Services - Fatal编程技术网

将来自Web服务的字节数组转换为UIImage iPhone

将来自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

我不熟悉这项技术。 我找了很多,但找不到任何相关的。 在我的应用程序中,我从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;

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:
不会出现在中。此方法可能是您已实现的on
NSData
的一部分。因此,如果不知道/不具备
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);
}