ByteArry zu Image umwandeln.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ViktorS.

    ByteArry zu Image umwandeln.

    Hi,

    ich möchte ein Bild über eine TCP Verbindung übertragen, dazu müchte ich das Bild zu einem ByteArry zerlegen dieses in ein String umwandeln, diesen versenden, den empfangenen String wieder zu einem ByteArry zusammenlegen und aus dem ByteArry wieder ein Image machen. Habe dafür 4 Methoden geschrieben, alle funktionieren, bis auf das Umwandeln von ByteArry zu Image. Der Fehler ist "Ungültiger Parameter."

    Das ist der Quellcode:

    VB.NET-Quellcode

    1. Public Function BytesToImage(ByVal ImageBytesArry() As Byte) As Image
    2. Try
    3. Dim imgNew As Image
    4. Dim memImage As New System.IO.MemoryStream(ImageBytesArry)
    5. imgNew = Image.FromStream(memImage) 'An dieser Stelle tritt der Fehler auf.
    6. Return imgNew
    7. Catch ex As Exception
    8. MsgBox(ex.Message, MsgBoxStyle.Critical)
    9. End Try
    10. End Function

    Ich weis aber nicht, woran es liegt und wie man es lösen kann.


    Alle 4 Methoden
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Functions
    2. Public Function BytesToImage(ByVal ImageBytesArry() As Byte) As Image
    3. Try
    4. Dim imgNew As Image
    5. Dim memImage As New System.IO.MemoryStream(ImageBytesArry)
    6. imgNew = Image.FromStream(memImage)
    7. Return imgNew
    8. Catch ex As Exception
    9. MsgBox(ex.Message, MsgBoxStyle.Critical)
    10. End Try
    11. End Function
    12. Public Function ImageToBytes(ByVal Image As Image) As Byte()
    13. Dim memImage As New System.IO.MemoryStream
    14. Dim bytImage() As Byte
    15. Image.Save(memImage, Image.RawFormat)
    16. bytImage = memImage.GetBuffer()
    17. Return bytImage
    18. End Function
    19. Public Function StrToByteArray(ByVal str As String) As Byte()
    20. Dim encoding As New System.Text.ASCIIEncoding()
    21. Return encoding.GetBytes(str)
    22. End Function
    23. Public Function ByteArryToStr(ByVal ByteArry() As Byte) As String
    24. Dim enc As New System.Text.ASCIIEncoding()
    25. Return enc.GetString(ByteArry)
    26. End Function
    27. End Module


    #EDIT#
    Korrektur, habe herausgefunden, dass es nicht an dieser Methode liegt, da das Umwandeln von Img zu ByteArry zu Img funktioniert, das Problem liegt entweder in ByteArry to String oder String to ByteArry.
    ###############################Lösung####################################
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Functions
    2. Public Function BytesToImage(ByVal ImageBytesArry() As Byte) As Image
    3. Try
    4. Dim imgNew As Image
    5. Dim memImage As New System.IO.MemoryStream(ImageBytesArry)
    6. imgNew = Image.FromStream(memImage)
    7. Return imgNew
    8. Catch ex As Exception
    9. MsgBox(ex.Message, MsgBoxStyle.Critical)
    10. End Try
    11. End Function
    12. Public Function ImageToBytes(ByVal Image As Image) As Byte()
    13. Try
    14. Dim memImage As New System.IO.MemoryStream
    15. Dim bytImage() As Byte
    16. '(1366x768)
    17. 'Gif 1,4MB, 355KB
    18. 'Jpeg 823KB, 98KB
    19. 'Png 1MB, 1MB
    20. 'Tiff 980KB, 1,09MB
    21. Image.Save(memImage, Image.RawFormat.Jpeg) 'Empfohlen
    22. 'Icon verboten
    23. 'Emf verboten
    24. 'Exif verboten
    25. 'MemoryBmp verboten
    26. 'Wmf verboten
    27. bytImage = memImage.GetBuffer()
    28. Return bytImage
    29. Catch ex As Exception
    30. MsgBox(ex.Message, MsgBoxStyle.Critical)
    31. End Try
    32. End Function
    33. Public Function SaveImage(ByVal Image As Image, ByVal Filename As String) As Boolean
    34. Image.Save(Filename)
    35. If System.IO.File.Exists(Filename) Then
    36. Return True
    37. Else
    38. Return False
    39. End If
    40. End Function
    41. Public Function StrToByteArray(ByVal Text As String) As Byte()
    42. Return System.Text.Encoding.Default.GetBytes(Text)
    43. End Function
    44. Public Function ByteArryToStr(ByVal ByteArray() As Byte) As String
    45. Try
    46. Return System.Text.Encoding.Default.GetString(ByteArray)
    47. Catch ex As Exception
    48. End Try
    49. End Function
    50. Public Function GetScreenShot() As Image
    51. Dim Btm As New Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height)
    52. Dim Grp As Graphics = Graphics.FromImage(Btm)
    53. Grp.CopyFromScreen(0, 0, 0, 0, Btm.Size)
    54. Grp.Dispose()
    55. Return Btm
    56. End Function
    57. Public Function StringToByteArray(ByRef str As String) As Byte()
    58. Try
    59. Return Convert.FromBase64String(str)
    60. Catch ex As Exception
    61. End Try
    62. End Function
    63. Public Function ByteArrayToString(ByRef Barr() As Byte) As String
    64. Try
    65. Return Convert.ToBase64String(Barr)
    66. Catch ex As Exception
    67. End Try
    68. End Function
    69. Public Function TextStringToByteArray(ByRef str As String) As Byte()
    70. Dim enc As System.Text.Encoding = System.Text.Encoding.Default
    71. Return enc.GetBytes(str)
    72. End Function
    73. Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
    74. Dim enc As System.Text.Encoding = System.Text.Encoding.Default
    75. Return enc.GetString(Barr)
    76. End Function
    77. End Module

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ViktorS“ ()

    So geht es auch^^, aber habe es jetzt auch so geschafft zu lösen^^

    Lösung:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Functions
    2. Public Function BytesToImage(ByVal ImageBytesArry() As Byte) As Image
    3. Try
    4. Dim imgNew As Image
    5. Dim memImage As New System.IO.MemoryStream(ImageBytesArry)
    6. imgNew = Image.FromStream(memImage)
    7. Return imgNew
    8. Catch ex As Exception
    9. MsgBox(ex.Message, MsgBoxStyle.Critical)
    10. End Try
    11. End Function
    12. Public Function ImageToBytes(ByVal Image As Image) As Byte()
    13. Dim memImage As New System.IO.MemoryStream
    14. Dim bytImage() As Byte
    15. Image.Save(memImage, Image.RawFormat)
    16. bytImage = memImage.GetBuffer()
    17. Return bytImage
    18. End Function
    19. Public Function StrToByteArray(ByVal Text As String) As Byte()
    20. Return System.Text.Encoding.Default.GetBytes(Text)
    21. End Function
    22. Public Function ByteArryToStr(ByVal ByteArray() As Byte) As String
    23. Return System.Text.Encoding.Default.GetString(ByteArray)
    24. End Function
    25. End Module



    Wörde aber dennoch gerne wissen, wie es mit dem GraphicsStream funktioniert.
    Das mit dem Bild => ByteArray => String klappt nicht bei jedem Bild, sondern nur bei 8Bit Bildern.

    Wie geht das mit dem GraphicsStream ?

    Könnte es jemand an einem Quellcode mit Kommentaren vorführen, wenn es keine Umstände macht?
    So inetwa?

    VB.NET-Quellcode

    1. Public Sub SendImage(ByVal Image As Image)
    2. StreamWriter.Write(Image)
    3. StreamWriter.Flush()
    4. End Sub

    VB.NET-Quellcode

    1. Public Sub SendFile(ByVal FilePath As String)
    2. Dim Reader As StreamReader
    3. Reader = New StreamReader(FilePath)
    4. Do Until Reader.EndOfStream
    5. StreamWriter.Write(Reader.Read())
    6. StreamWriter.Flush()
    7. Loop
    8. End Sub


    Ganze Klasse:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Threading
    3. Imports System.Net
    4. Imports System.IO
    5. Public Class TCP_Listener
    6. Private TcpListener As TcpListener
    7. Private TcpClient As New TcpClient
    8. Private Stream As Stream
    9. Private StreamWriter As StreamWriter
    10. Private StreamReader As StreamReader
    11. Public Sub Start(ByVal Port As Integer)
    12. TcpListener = New TcpListener(System.Net.IPAddress.Any, Port)
    13. TcpListener.Start()
    14. TcpClient = New TcpClient
    15. TcpClient = TcpListener.AcceptTcpClient
    16. Stream = TcpClient.GetStream
    17. StreamWriter = New StreamWriter(Stream)
    18. StreamReader = New StreamReader(Stream)
    19. End Sub
    20. Public Sub SendText(ByVal Text As String)
    21. StreamWriter.Write(Text)
    22. StreamWriter.Flush()
    23. End Sub
    24. Public Sub SendImage(ByVal Image As Image)
    25. StreamWriter.Write(Image)
    26. StreamWriter.Flush()
    27. End Sub
    28. Public Sub SendFile(ByVal FilePath As String)
    29. Dim Reader As StreamReader
    30. Reader = New StreamReader(FilePath)
    31. Do Until Reader.EndOfStream
    32. StreamWriter.Write(Reader.Read())
    33. StreamWriter.Flush()
    34. Loop
    35. End Sub
    36. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ViktorS“ ()