BitmapImage to byte []
У меня есть BitmapImage
, который я использую в приложении WPF, позже я хочу сохранить его в базе данных как массив байтов (я думаю, это лучший способ), как я могу выполнить это преобразование?
Или, наоборот, есть лучший способ сохранить BitmapImage
(или любой из его базовых классов, BitmapSource
или ImageSource
) в хранилище данных?
Ответы
Ответ 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();
}