无法将我的ImageView更改为从Swift

时间:2016-07-05 15:59:47

标签: python swift uiimageview buffer twisted

我正在尝试通过输入流检索图片,然后将我的ImageView设置为该图片。下面是我的代码,用于检索输入流和读取数据。

 let bufferSize = 1024
    var buffer = Array<UInt8>(repeating: 0, count: bufferSize)

    while (inputStream.hasBytesAvailable){
        let len = inputStream.read(&buffer, maxLength: buffer.count)
        if(len > 0){
            let imageData = NSData(bytes: &buffer, length: buffer.count)
            print("\(imageData)")
            let newImage = UIImage(data: imageData as Data)
            ImageView.image = newImage
        }
    }

我正在使用CFStream作为接收数据的套接字。所有这一切都很好,因为我能够发送和接收我所有的其他数据但由于某种原因图片没有。

非常感谢。

更新。

下面的代码不会引发任何错误,但图片仍未显示。我的服务器代码有什么问题吗?

        f = open("/home/pi/Documents/server/foo.jpg", "rb")
        byte = f.read()
        print "Done reading"
        self.transport.write(byte)
        f.close()
        print "Done sending" 

服务器代码是用Twisted Python编写的,并且连接正在相应地工作,因为我能够传输除图片之外的其他消息。

2 个答案:

答案 0 :(得分:1)

因此,要将数据片段累积到一个Data中,您需要编写如下内容:

    let bufferSize = 1024
    var buffer = Array<UInt8>(repeating: 0, count: bufferSize)
    //You need to assign an actual Data to the variable.
    //With initial value given, you have no need to work with Optionals.
    var imageData = Data()
    while (inputStream.hasBytesAvailable){
        let len = inputStream.read(&buffer, maxLength: buffer.count)
        if(len > 0){
            imageData.append(&buffer, count: buffer.count)
        }
    }
    //You need to try converting the data to image after reading all data fragments.
    let newImage = UIImage(data: imageData)
    pictureView.image = newImage

如果您发现此代码存在其他问题,请报告此答案的评论。

答案 1 :(得分:0)

我的错误是没有发送文件的每个字节。当我将服务器代码更改为:

with open("/home/pi/Documents/server/foo.jpg", "rb") as f:
    byte = f.read()
    print "Done reading"
    while byte:
        self.transport.write(byte)
        byte = f.read(1)
    print "Done sending"
f.close() 

工作得很好。但是,我会接受下面的答案,因为它可能是我如何将我的数据读入新图像文件的问题。