ändern Ich versuche, ein Bild über einen Eingangsstrom abrufen und dann meine ImageView zu diesem Bild festlegen. Im Folgenden finden Sie meinen Code zum Abrufen des Eingabestreams und zum Lesen der Daten.Kann meine ImageView nicht zu Daten aus Stream in Swift
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
}
}
Ich benutze die CFStream als Sockets zum Empfangen von Daten. All dies funktioniert gut, da ich alle meine anderen Daten senden und empfangen kann, aber aus irgendeinem Grund nicht das Bild.
Vielen Dank.
UPDATE.
Der Code von unten wirft keine Fehler, aber das Bild wird immer noch nicht angezeigt. Ist irgendetwas mit meinem Servercode nicht in Ordnung?
f = open("/home/pi/Documents/server/foo.jpg", "rb")
byte = f.read()
print "Done reading"
self.transport.write(byte)
f.close()
print "Done sending"
Der Server-Code wird in Twisted-Python geschrieben und die Verbindung funktioniert entsprechend, da ich in der Lage bin andere Nachrichten zu übertragen, als das Bild.
'inputStream.read (& buffer, maxLength: buffer.count)' liest bis zu 'buffer.count' (= 1024) Bytes. Ist Ihr Bild kleiner als 1024 Bytes? – OOPer
Nein, aber es liest weiter, bis der inputStream leer ist, oder? – Oliver
In Ihrem Code lesen Sie weiterhin aus dem inputStream, aber Sie versuchen, Ihr Bild mit jedem Datenfragment zu erstellen, das kleiner oder gleich 1024 Bytes ist. Möglicherweise müssen Sie alle Datenfragmente in einer einzigen Datengruppe zusammenfassen, und nach dem Lesen aller Datenfragmente müssen Sie die gesammelten Daten (nicht die letzten Datenfragmente) in UIImage konvertieren. – OOPer