Объект 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();
}