我正在将图像转换为字节数组,但无法从相同的字节数组中获取图像

i am converting an image to a byte array but fail to get an image from same byte array

我有两个图像视图,一个图像视图是显示从图库中挑选的图像,第二个图像视图是显示从 NSData 转换为 [UINT8][UINT8]UIImage

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){

    imagePickerController.dismissViewControllerAnimated(true, completion: nil)
    importImage.image=info[UIImagePickerControllerOriginalImage] as? UIImage

    let imageData:NSData = UIImageJPEGRepresentation(importImage.image!,1)!

    let imageata=convertionofImageToByteArray(imageData)


   let cadenaImagen=imageata as NSArray



   convertedImage.image = convierteImagen(cadenaImagen)

}

以下将图像转换为字节数组的方法

func convertionofImageToByteArray(imageData:NSData)->NSMutableArray{

    let count = imageData.length / sizeof(UInt8)

    // create array of appropriate length:
    var bytes = [UInt8](count: count, repeatedValue: 0)

    // copy bytes into array
    imageData.getBytes(&bytes, length:count * sizeof(UInt8))

    let byteArray:NSMutableArray = NSMutableArray()

    for i in 0..<count{
        byteArray.addObject(NSNumber(unsignedChar: bytes[i]))
    }

    return byteArray

}

下面的方法将字节数组转换为图像

func convierteImagen(cadenaImagen: NSArray) -> UIImage? {

    var bytes = [UInt8]()
    for i in 0..<cadenaImagen.count {
        if let signedByte = Int8(String(cadenaImagen[i])) {
            bytes.append(UInt8(bitPattern: signedByte))
        } else {
            // Do something with this error condition
        }
    }
    let datos: NSData = NSData(bytes: bytes, length: bytes.count)
    return UIImage(data: datos) // Note it's optional. Don't force unwrap!!!
}

我不明白为什么你会认为将无符号字节类型转换为有符号字节会起作用。实际上,您甚至有一条评论来处理那里的错误,并且每次发生溢出时它都会遇到该错误(结果为零)。

所以试试这个:

func convierteImagen(cadenaImagen: NSArray) -> UIImage? {

        var bytes = [UInt8]()
        for i in 0..<cadenaImagen.count {
            if let  signed = UInt8(String(cadenaImagen[i])) {
                bytes.append(signed)
            } else {
                // Do something with this error condition
            }
        }
        let datos: NSData = NSData(bytes: bytes, length: bytes.count)
        return UIImage(data: datos) // Note it's optional. Don't force unwrap!!!
    }

对于 bytes 中任何大于 127 的值,语句 if let signedByte = Int8(String(cadenaImagen[i])) { 将失败。