2014-01-19 75 views
1

我有一個代碼,我想從圖像中獲取流並將內存流轉換爲字符串數組並存儲在變量中。但我的問題是我也想從字符串變量中獲取圖像並在圖片框上繪製。如何將內存流轉換爲字符串數組,反之亦然

如果我使用這個像 PictureBox1.Image = image.FromStream(memoryStream) 我可以在圖片框上打印圖片。但這不是我的需要。我只想從文件中獲取圖像流並將其轉換爲文本並將其存儲爲某個字符串變量,然後再次使用字符串變量並將其轉換爲流以在圖片框上打印圖像。

這裏是我的代碼。(VB快遞2008)在您發佈的方式

Public Function ImageConversion(ByVal image As System.Drawing.Image) As String 
     If image Is Nothing Then Return "" 

     Dim memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream 
     image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif) 

     Dim value As String = "" 


     For intCnt As Integer = 0 To memoryStream.ToArray.Length - 1 
      value = value & memoryStream.ToArray(intCnt) & " " 
     Next 

     Dim strAsBytes() As Byte = New System.Text.UTF8Encoding().GetBytes(value) 
     Dim ms As New System.IO.MemoryStream(strAsBytes) 


     PictureBox1.Image = image.FromStream(ms) 

     Return value 
    End Function 
+0

我只是好奇 - 爲什麼你需要轉換/圖像加載到一個內存流,以便在圖片框中顯示它,不能直接將圖像保存到文件系統,然後使用標準方法加載它? – pasty

+0

感謝您的寶貴意見。但我知道標準方法。我只想在Rich text Box中加載字符串變量。我在哪裏得到像 「71 70 56 255 240 15 ....」(取決於圖片)rgb值,我想手動更改該值僅用於實驗目的並重新打包到圖像中,nd我希望看到更改。 :) –

回答

0

這wouldn`t工作(再現圖像的至少一部分)。 看到這個:

Public Function ImageConversion(ByVal image As System.Drawing.Image) As String 
    If image Is Nothing Then Return "" 

    Dim memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream 
    image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif) 

    Dim value As String = "" 

    Dim content As Byte() = memoryStream.ToArray() 
    ' instead of repeatingly call memoryStream.ToArray by using 
    ' memoryStream.ToArray(intCnt) 
    For intCnt As Integer = 0 To content.Length - 1 
     value = value & content(intCnt) & " " 
    Next 
    value = value.TrimEnd() 

    Return value 
End Function 

要使用創建的字符串,你不能老是用Encoding.GetBytes()像你這樣的,因爲你會得到它代表你的字符串的ByteArray重建圖像。如「123 32 123」你不會得到一個字節數組的元素123,32,123

Public Function ImageConversion(ByVal stringRepOfImage As String) As System.Drawing.Image 
    Dim stringBytes As String() = stringRepOfImage.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries) 
    Dim bytes As New List(Of Byte) 
    For intCount = 0 To stringBytes.Length - 1 
     Dim b As Byte 
     If Byte.TryParse(stringBytes(intCount), b) Then 
      bytes.Add(b) 
     Else 
      Throw new FormatException("Not a byte value") 
     End If 
    Next 
    Dim ms As New System.IO.MemoryStream(bytes.ToArray) 
    Return Image.FromStream(ms) 
End Function 

參考:Byte.TryParse

+0

謝謝。它運作良好。 –

+0

對不起,我不明白這部分你能解釋一下嗎? 「昏暗b以字節 如果Byte.TryParse(stringBytes(intCount),B),然後 bytes.Add(B) 結束如果」 –

+0

假設你已經改變了你的RichTextBox內的值的值不能老是會轉換爲一個字節,因爲例如值是1234,所以Byte.TryParse嘗試將該值解析爲一個字節,否則返回true,否則返回false。 也許最好拋出一個異常,因爲它不會產生一個有效的圖像了。 – Heslacher

相關問題