2014-01-19 3 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

감사합니다. 그러나 나는 표준 방법을 안다. 서식있는 텍스트 상자에 문자열 변수를로드하려고합니다. 내가 처럼 "71 70 56 255 240 15 ...."(사진에 따라 다름)과 같은 rgb 값을 얻었고 실험 목적으로 값을 수동으로 변경하고 이미지에 재 포장하고 싶습니다. 변화. :) –

답변

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 

당신이 그랬던 것처럼 당신이 당신의 문자열을 나타내는 된 ByteArray를 얻을 것입니다 때문에,() Encoding.GetBytes를 사용은`t 생성 된 문자열을 사용하여 이미지를 다시 만들려면. 예 : "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

죄송합니다.이 부분을 이해할 수 없습니까? '희미한 바이트 으로 Byte.TryParse (stringBytes (intCount), b)의 경우 bytes.Add (b)에 종료되면 B' –

+0

당신이 값으로하여 RichTextBox 내부의 값을 변경했다고 가정은 수은't 예를 들어 값이 1234이므로 Byte.TryParse는 값을 바이트로 구문 분석하고 성공하면 true를 반환하고 그렇지 않으면 false를 반환하기 때문에 바이트로 변환됩니다. 유효한 이미지가 더 이상 나오지 않으므로 예외를 던지는 것이 더 나을 것입니다. – Heslacher

관련 문제