Hallo zusammen,
ich brauche Hilfe bei der Ausgabe einer Bitmap.
Und zwar bekomme ich über eine TCP/IP Verbindung einen Byte Array, der
eine Bitmap darstellen soll.
Die Kommunikation funktioniert, nur kann ich den Byte-Array nicht als
Bitmap in einer "PictureBox" darstellen oder die Bitmap abspeichern.
VB.NET Code:
1 | Imports System.IO
|
2 | Imports System.Collections
|
3 | Imports System.Net.Sockets
|
4 | Imports System.Net
|
5 | Imports System.Text
|
6 | Imports System.Threading
|
7 |
|
8 | Imports System.Drawing.Bitmap
|
9 | Imports System.Drawing.Image
|
10 |
|
11 | Public Class Form1
|
12 |
|
13 | Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
14 |
|
15 | Dim Socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
|
16 | Dim IP As IPAddress = IPAddress.Parse("192.168.5.5") 'IP Server
|
17 |
|
18 | If Socket.Connected = False Then
|
19 | Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
|
20 | Socket.Connect(IP, 23) 'Verbindung mit der IP-Adresse und dem Port herstellen
|
21 | ElseIf Socket.Connected = True Then
|
22 | MessageBox.Show("Verbindung bereits hergestellt")
|
23 | End If
|
24 |
|
25 | Dim Get_Image() As Byte
|
26 | Dim Response_Image(362038) As Byte
|
27 |
|
28 | Get_Image = Encoding.ASCII.GetBytes("GI0100") 'Befehl zur Bildübertragung
|
29 | Socket.Send(Get_Image) 'Bildanfrage Senden
|
30 | Socket.Receive(Response_Image) 'Bild empfangen
|
31 |
|
32 | Dim Pfad As String = "C:\Bilder.bmp" 'Ort
|
33 | Dim Speicher As New MemoryStream(Response_Image) 'Bild zwischenspeichern
|
34 | Dim Bild As Image
|
35 |
|
36 | Bild = Image.FromStream(Speicher) '<- Fehlermeldung: Ungültiger Parameter.
|
37 |
|
38 | PictureBox1.Image = Bild
|
39 | Bild.Save(Pfad)
|
40 |
|
41 | Socket.Disconnect(True)
|
42 | End Sub
|
43 |
|
44 | End Class
|
Der Byte-Array, den ich von der Server-Anwendung bekomme hat folgenden
Aufbau:
RI|01|00|00058636|BM...
Die ersten beiden Bytes stehen für Response Image,
Der nächste Block (gekennzeichnet durch |) sagt mir, ob es ein Livebild
ist oder aus dem Speicher kommt.
Danach folgt die Bildnummer und die letzten acht Bytes geben Aufschluss
über die länge der Bilddaten.
Ab "BM" folgen die eigentlichen Daten der Bitmap.
Falls jemand weiß, wie man eine Bitmap vernünftig aus einem Byte Array
heraus bekommt, würde ich mich sehr über ein paar Tipps freuen.
Edit: MS Visual Studio 2013
Grüße