我正在尝试通过输入流检索图片,然后将我的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编写的,并且连接正在相应地工作,因为我能够传输除图片之外的其他消息。
答案 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()
工作得很好。但是,我会接受下面的答案,因为它可能是我如何将我的数据读入新图像文件的问题。