2017-03-23 18 views
1

私はサーバーに送信しているNSInputStreamを持っていて、アップロード中にアップロードしている画像を表示したいと思います。メソッドはシングルトンにあり、それはそのNSInputStreamを受け取ります。そのストリームを読んでUIImageに変換する方法はありますか?NSInputStreamを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") 
    } 

ありがとうございます!

+0

デバッガを使用しましたか?投稿したコードを実行すると実際に何が起こりますか? – rmaddy

+0

変数 'pictureData'はバッファカウント' 1024'の長さです。 countの値を変更し、 'pictureData'の長さをcountの値に変更し、ランタイムが失敗し、コードの' pictureData'行が強調表示されます。また、メディアが正常にサーバーにアップロードされているため、このメソッドに画像データを送信していることを確認しています。 @rmaddy – Srdjan

+0

最初の1024バイトだけでなく、すべてのデータを入力ストリームから読み込む必要があります。 – rmaddy

答えて

3

私はこの問題の解決策を見つけましたが、それは正常に機能しています。

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 
     }) 
    } 
関連する問題