Bild aus HttpWebResponse als String übertagen und Client-seitig wieder herstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Bild aus HttpWebResponse als String übertagen und Client-seitig wieder herstellen

    Hallo zusammen,

    Ich möchte gern mit einem Server-Dienst das Bild einer IP-Kamera abfragen und dieses via TCP an verschiedene Clients verteilen.
    Hier ist der bisherige Code:

    VB.NET-Quellcode

    1. 'Request
    2. Dim request As WebRequest = WebRequest.Create("http://192.168.100.222/jpg/image.jpg")
    3. ' If required by the server, set the credentials.
    4. request.Credentials = New System.Net.NetworkCredential("admin", "admin")
    5. ' Get the response.
    6. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    7. ' Get the stream containing content returned by the server.
    8. 'Dim dataStream As Stream = response.GetResponseStream()
    9. Dim reader As New StreamReader(response.GetResponseStream)
    10. Dim AnswerToClient As String = reader.ReadToEnd
    11. 'Übertragen zum Client
    12. '...
    13. 'Client empfängt den string
    14. 'jetzt wieder in einen Stream umwandeln
    15. Dim Buffer() As Byte = Encoding.Default.GetBytes(AnswerToClient)
    16. Dim mstream As New MemoryStream(Buffer)
    17. ' Read the content.
    18. Dim picture As New System.Drawing.Bitmap(mstream)


    Wenn ich den ausgeklammerten Stream direkt an den Konstruktor des Bitmaps lege, funktioniert alles, wie wahrscheinlich alle hier schon wissen. Im oben gezeigtem Beispiel läuft der Debugger auf einen Fehler, den ich mir nicht erklären kann ("Ungültiger Parameter.").
    Hat von euch jemand eine Idee, woran das liegen kann?
    Ich bin neu hier, seid also bitte nicht böse, falls dieses Thema schon öfter behandelt wurde. ^^
    Habe die Lösung nun selbst gefunden. Falls es jemanden interessiert hier der geänderte Code:

    VB.NET-Quellcode

    1. 'Abfrage starten
    2. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    3. 'Stream erstellen
    4. Dim dataStream As Stream = response.GetResponseStream()
    5. 'Bytes holen
    6. Dim Buffer() As Byte = Nothing
    7. Dim Ende As Boolean = False
    8. Dim Offset As Long = 0
    9. Dim Buffersize As Long = 0
    10. While Not Ende
    11. Dim TempBuffer(1023) As Byte
    12. Dim Anzahl As Integer = dataStream.Read(TempBuffer, 0, 1024)
    13. If Anzahl <= 0 Then Exit While
    14. ReDim Preserve Buffer(Buffersize + Anzahl - 1)
    15. Buffersize += Anzahl
    16. Array.Copy(TempBuffer, 0, Buffer, Offset, Anzahl)
    17. Offset += Anzahl
    18. End While
    19. 'ByteArray zu einen Sting umwandeln
    20. Dim AnswerToClient As String = [String].Join(";", Buffer)
    21. 'Übertragen zum Client
    22. '...
    23. 'Client empfängt den string
    24. Dim AntwortStringArray() As String = Split(AnswerToClient, ";")
    25. Dim ByteArray() As Byte
    26. ByteArray = Array.ConvertAll(AntwortStringArray, Function(input As String) Byte.Parse(input))
    27. 'Stream wieder herstellen
    28. Dim mStream As New MemoryStream(ByteArray)
    29. 'Picture erstellen
    30. locPicture = New System.Drawing.Bitmap(mStream)