无法将我的 ImageView 更改为从 Swift 中的流检索的数据
Can't change my ImageView to data retrieved from stream in Swift
我正在尝试通过输入流检索图片,然后将我的 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 编写的,并且连接正常工作,因为我能够传输图片以外的其他消息。
所以,要将数据片段累积成一个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
如果您发现此代码存在其他问题,请作为对此答案的评论报告。
我的错误是没有发送文件的每个字节。当我将服务器代码更改为:
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()
它运行良好。但是,我会接受下面的答案,因为我将数据读入新图像文件的方式也可能存在问题。
我正在尝试通过输入流检索图片,然后将我的 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 编写的,并且连接正常工作,因为我能够传输图片以外的其他消息。
所以,要将数据片段累积成一个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
如果您发现此代码存在其他问题,请作为对此答案的评论报告。
我的错误是没有发送文件的每个字节。当我将服务器代码更改为:
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()
它运行良好。但是,我会接受下面的答案,因为我将数据读入新图像文件的方式也可能存在问题。