【问题标题】:NSData to byte array (or array of integers)NSData 到字节数组(或整数数组)
【发布时间】:2012-05-01 19:06:46
【问题描述】:

我正在使用一个网络服务,它给我一个整数数组的图像。我已经设法使用下面的代码将此数组转换为NSData 对象,然后转换为UIImage。 现在我怀疑如何将图像转换为类似的数组。

数组如下所示:

[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6,7,6,5,8,7,7,7,9,9,8,10,12,...]

这是我用来将上述数组转换为UIImage 的代码。

+ (UIImage *)imageFromBytes:(NSArray *)bytes
{
    unsigned char *buffer = (unsigned char *) malloc(bytes.count);
    int i = 0;
    for (NSDecimalNumber *num in bytes)
        buffer[i++] = num.intValue;
    NSData *data = [NSData dataWithBytes:buffer length:bytes.count];
    free(buffer);

    return [UIImage imageWithData:data];
}

所以,我需要将UIImage 转换为整数数组(字节数组)。

谁能指出我正确的方向?

【问题讨论】:

    标签: iphone uiimage bytearray nsdata


    【解决方案1】:

    您可以通过以下方式获取图像的数据:

    UIImage *image = [UIImage imageNamed:@"image.png"];
    NSData *data = UIImagePNGRepresentation(image);
    

    如果您使用 JPG,则可以使用 UIImageJPEGRepresentation。

    然后,提取字节数组:

    NSUInteger len = [data length];
    Byte *byteData = (Byte*)malloc(len);
    memcpy(byteData, [data bytes], len);
    free(byteData)
    

    您也可以使用来自 NSData 的 (void)getBytes:(void *)buffer length:(NSUInteger)length 方法:

    [data getBytes:&byteData length:len];
    

    【讨论】:

    • 从 getBytes 接收的字节 - 它们是 java 可以理解并重新形成图像的原始字节,还是 NSData 对象的字节(随后将被解码为另一个 NSData 对象和因此java无法理解)...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2012-05-28
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多