2016-09-19 13 views
1

나는 그렇게처럼 내 데이터베이스의 테이블이 다음 Icon 열 유형 인VarBinary 값을 이미지로 변환하려면 어떻게해야합니까?

Id | Description | Icon 

varbinary(max)

나는 Icon 열의 값은 페이스트 빈에 표시됩니다이 테이블에 행이 링크 (이 때문에 긴 값) :

http://pastebin.com/LbVAf20A

내 프로그램 사용 t에서 이미지에이 VARBINARY 값을 변환하는 것을 시도하고있다 그는 다음 코드는 here 언급 :

StreamText는 페이스트 빈 링크

의 문자열입니다 그러나 행 var image...에서 나는 예외가 계속

var binary = new System.Data.Linq.Binary(GetBytes(StreamText)).ToArray(); 
using (MemoryStream stream = new MemoryStream(binary)) 
{ 
    var image = new System.Drawing.Bitmap(stream); 
    image.Save(DownloadPath, ImageFormat.Png); 
} 

private byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
     return bytes; 
} 

.

매개 변수가 유효하지 않습니다 내가 잘못 뭐하는 거지

?

+2

왜 직접 바이트 배열로 데이터베이스에서 문자열로 VARBINARY 열을 얻고,하지 않습니다 당신은이 같은 바이트 배열로 16 진수 문자열로 변환하기 위해 인터넷의 주위에 찾을 수있는 모든 방법을 사용할 수 있습니까? – Evk

+0

편의를 위해 @Evk 내 varbinary 열의 'string'값을 복사하여 붙여 넣고 이미지로 변환하려고합니다. 내가 직접 값을 가지고 있다면 사용자가 테이블을 선택할 수 있도록 더 많은 UI가 필요하고 행은 – user1

+1

@ user1 복사 및 붙여 넣기는 무엇입니까? – juharr

답변

1

문제는 문자열이 16 진수 문자열이고 ASCII 문자열 인 것처럼 바이트 배열로 변환하려고합니다.

static void Main(string[] args) 
    { 
     var s = "your long hex string"; 
     if (s.StartsWith("0x")) 
      s = s.Remove(0, 2); 
     using (var stream = new MemoryStream(ConvertHexStringToByteArray(s))) 
     { 
      var image = new Bitmap(stream); 
      image.Save(DownloadPath, ImageFormat.Png); 
     }    
    } 

    public static byte[] ConvertHexStringToByteArray(string hexString) { 
     if (hexString.Length%2 != 0) { 
      throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); 
     } 

     byte[] HexAsBytes = new byte[hexString.Length/2]; 
     for (int index = 0; index < HexAsBytes.Length; index++) { 
      string byteValue = hexString.Substring(index*2, 2); 
      HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture); 
     } 

     return HexAsBytes; 
    }