Подтвердить что ты не робот

BitmapImage to byte []

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

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

4b9b3361

Ответ 1

Чтобы преобразовать в байт [], вы можете использовать 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, который вам нравится, как сказал casperOne.

Если вы используете MS SQL, вы также можете использовать image -Column, поскольку MS SQL поддерживает этот тип данных, но вам все равно потребуется преобразовать BitmapImage.

Ответ 2

Вам нужно будет использовать экземпляр класса, который происходит от BitmapEncoder (например, BmpBitmapEncoder) и вызовите метод Save, чтобы сохранить BitmapSource в Stream.

Вы выбрали бы определенный кодировщик в зависимости от формата, в котором вы хотите сохранить изображение.

Ответ 3

записать его в 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;
}

Ответ 4

Просто используйте MemoryStream.


byte[] data = null;

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