WPFアプリケーションで使用しているBitmapImage
があり、後でそれをバイト配列としてデータベースに保存したいのですが(最良の方法だと思います)、この変換を実行するにはどうすればよいですか?
または、代わりに、BitmapImage
(またはその基本クラス、BitmapSource
またはImageSource
)をデータリポジトリに保存するより良い方法はありますか?
Byte []に変換するには、MemoryStreamを使用できます。
byte[] data;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
using(MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
data = ms.ToArray();
}
CasperOneが言ったように、JpegBitmapEncoderの代わりに、好きなBitmapEncoderを使用できます。
MS SQLを使用している場合は、MS SQLがそのデータ型をサポートするため、image
- Columnも使用できますが、それでも何らかの方法でBitmapImageを変換する必要があります。
BitmapEncoder
( BmpBitmapEncoder
など)から派生するクラスのインスタンスを使用し、 Save
BitmapSource
をStream
に保存するメソッド。
画像を保存する形式に応じて、特定のエンコーダーを選択します。
MemoryStream
に書き込むと、そこからバイトにアクセスできます。このようなもの:
public Byte[] ImageToByte(BitmapImage imageSource)
{
Stream stream = imageSource.StreamSource;
Byte[] buffer = null;
if (stream != null && stream.Length > 0)
{
using (BinaryReader br = new BinaryReader(stream))
{
buffer = br.ReadBytes((Int32)stream.Length);
}
}
return buffer;
}