Объект bitmapimage в байт[]

у меня есть BitmapImage что я использую в приложении WPF, я позже хочу сохранить его в базе данных в виде массива байтов (я думаю, это лучший способ), как я могу выполнить это преобразование?

или, в качестве альтернативы, есть ли лучший способ сохранить BitmapImage (или любой из его базовых классов, BitmapSource или ImageSource) в хранилище данных?

4 ответов


для преобразования в байт[] вы можете использовать MemoryStream:

byte[] data;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
using(MemoryStream ms = new MemoryStream())
{
    encoder.Save(ms);
    data = ms.ToArray();
}

вместо JpegBitmapEncoder вы можете использовать любой BitmapEncoder вам нравится, как сказал каспероне.

Если вы используете MS SQL, вы также можете использовать image-столбец, поскольку MS SQL поддерживает этот тип данных, но вам все равно нужно будет каким-то образом преобразовать 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;
}

просто использовать потоке MemoryStream.


byte[] data = null;

using(MemoryStream ms = new MemoryStream())
{
    bitmapImage.Save(ms);
    data = ms.ToArray();
}