BitmapImage to byte [] - PullRequest
       36

BitmapImage to byte []

35 голосов
/ 06 июля 2011

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

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

Ответы [ 4 ]

54 голосов
/ 06 июля 2011

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

5 голосов
/ 06 июля 2011

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

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

0 голосов
/ 06 июля 2011

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


byte[] data = null;

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


0 голосов
/ 06 июля 2011

записать его в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...