web-dev-qa-db-ja.com

BitmapImage to byte []

WPFアプリケーションで使用しているBitmapImageがあり、後でそれをバイト配列としてデータベースに保存したいのですが(最良の方法だと思います)、この変換を実行するにはどうすればよいですか?

または、代わりに、BitmapImage(またはその基本クラス、BitmapSourceまたはImageSource)をデータリポジトリに保存するより良い方法はありますか?

35
So Many Goblins

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を変換する必要があります。

54
ChrFin

BitmapEncoderBmpBitmapEncoder など)から派生するクラスのインスタンスを使用し、 SaveBitmapSourceStreamに保存するメソッド。

画像を保存する形式に応じて、特定のエンコーダーを選択します。

5
casperOne

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;
}
0
Muad'Dib