2012-02-29 4 views
1

昨日から、私はバイト配列からイメージをロードしようとしています。 私はNorthWind databaseのEmployeesテーブルからバイト配列を取得します。 articlesには、サイズ78のOLEヘッダーがあり、バイト[]からImageSourceに変換する前に削除する必要があることが記載されています。しかし、それはどんなイメージも得られない。ここ は私のコンバータです。ここNorthwindデータベースのEmployeesテーブルから画像をロード

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     byte[] data = value as byte[];   

     if (data != null) 
     { 
      MemoryStream ms = new MemoryStream(); 
      int offset = 78;    
      BitmapImage img = new BitmapImage();     
      ms.Write(data, offset, data.Length - offset); 
      img.SetSource(ms); 
      ms.Close(); 
      return img; 
     } 
     return null; 

    } 

はXAML

<Image Grid.Column="1" Height="147" HorizontalAlignment="Left" Margin="3,3,0,6" Name="photoImage" Source="{Binding Path=Photo, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource PhotoConverter1}}" Stretch="Fill" VerticalAlignment="Center" Width="137" DataContext="{Binding}" /> 

の私のイメージ定義は、あなたがそれを動作させる方法を見つけ出すために私を助けてもらえますか?

答えて

0

http://en.wikipedia.org/wiki/BMP_file_format

あなたは、配列を見て、ビットマップがビットマップのヘッダー情報を使用して起動する場所を確認することができるはずです。

このコードはまた、あなたを助けるかもしれない:Windowsで http://blogs.msdn.com/b/pranab/archive/2008/07/15/removing-ole-header-from-images-stored-in-ms-access-db-as-ole-object.aspx

+0

をヘッダは常にBMまたはASCIIで始まり「424D」また、データのビッグまたはリトルエンディアンフォーマットに応じて、「4D42」であってもよいです。 – Alikar

+0

あなたの答えに感謝します。私はあなたのリンクに行って、与えられたコードを使用しましたが、画像はまだロードされません(画像は画像コントロールに表示されません).2番目のリンクのコードはオフセットが78であることを確認します。 – Shomron

+0

ビットマップあなたの質問へのヘッダー。おそらく、それは正しくフォーマットされていません。 – Alikar

関連する問題