2016-09-19 9 views
1

は、私は私のようにデータベース内のテーブルを有する:Icon列がタイプであるVarBinary Valueをイメージに変換するにはどうすればよいですか?

Id | Description | Icon 

varbinary(max)

IはIcon列の値をペーストビンに示され、このテーブルの行を持っていますリンク(それは長い値であるため):

http://pastebin.com/LbVAf20A

私はトンを使用して私のプログラムで画像にこの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列は、バイト配列ではなくデータベースから文字列として取得されますか?インターネット経由では、どのような方法でもバイト配列をバイト配列に変換できますか? – 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; 
    } 
関連する問題