2017-03-23 3 views
1

J'ai un NSInputStream que j'envoie au serveur et pendant que le téléchargement est en cours, je veux afficher l'image qui est en train de télécharger. La méthode est située dans singleton et reçoit ce NSInputStream. Est-il possible de lire ce flux et de le convertir en UIImage? J'ai essayé avec cela, mais pas de chance. Où est mon erreur?Comment convertir NSInputStream en UIImage

var buffer = [UInt8](count:1024, repeatedValue: 0) 
    thumbnailStream.open() 
    if (thumbnailStream.hasBytesAvailable){ 
     let len : Int = inputStream.read(&buffer, maxLength: buffer.count) 
     var pictureData = NSData(bytes: buffer, length: len) 
     var imagess = UIImage(data: pictureData)! 
     self.headerProgress.imageView.image = imagess 
     print("Data of image = \(pictureData.length)") 

     }else{ 
     print("No bytes") 
    } 

Merci!

+0

Avez-vous utilisé le débogueur? Que se passe-t-il réellement lorsque vous exécutez le code que vous avez publié? – rmaddy

+0

La variable 'pictureData' a la longueur du compte tampon' 1024'. J'ai changé la valeur du compte et la longueur de 'pictureData' est changée à la valeur du compte et aussi l'exécution échoue et la ligne' pictureData' du code est mise en évidence. En outre, je suis sûr que j'envoie les données d'image à cette méthode parce que le média est téléchargé avec succès sur le serveur. @rmaddy – Srdjan

+0

Vous devez lire toutes les données du flux d'entrée, pas seulement les 1024 premiers octets. – rmaddy

Répondre

3

J'ai trouvé la solution à ce problème et il est en état de marche.

var count = 0 
    let dataOfTheImage = NSMutableData() 
    var buffer = [UInt8](count:1024, repeatedValue: 0) 
    thumbnailStream.open() 

    //MARK: Loop through thumbnail stream 
    while (thumbnailStream.hasBytesAvailable){ 
     count = count + 1 
     print("Counter: \(count)") 
     //MARK: Read from the stream and append bytes to NSMutableData variable 
     let len = thumbnailStream.read(&buffer, maxLength: buffer.count) 
     dataOfTheImage.appendBytes(buffer, length: len) 

     //MARK: Size of the image in MB 
     let size = Float(dataOfTheImage.length)/1024.0/1024.0 
     print("Data length = \(size)") 
    } 

    //MARK: Check if there are no bytes left and show the image 
    if (thumbnailStream.hasBytesAvailable == false){ 
     thumbnailStream.close() 
     // var pictureData = NSData(bytes: buffer, length: len) 
     let progressImage = UIImage(data: dataOfTheImage)! 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.headerProgress.imageView.image = progressImage 
     }) 
    }