我想实现以下两项服务: (使用web api处理此事)
服务器将图片存储在DB iun varbinary中。 图片可以是bmp,jpg,ico
我的功能签名是
AddIcon(string Id, byte[] IconFile)
然后我想把它插入数据库。 现在,如果我通过我的DTO传递BitmapImage,我需要引用许多对象,我不认为这是最佳实践。这就是为什么我更喜欢byte []。
答案 0 :(得分:1)
BitmapImage已经过优化,它隐藏了编解码信息等细节。您可以使用:
public static byte[] SaveToPng(this BitmapSource bitmapSource)
{
return SaveWithEncoder<PngBitmapEncoder>(bitmapSource);
}
private static byte[] SaveWithEncoder<TEncoder>(BitmapSource bitmapSource) where TEncoder : BitmapEncoder, new()
{
if (bitmapSource == null) throw new ArgumentNullException("bitmapSource");
using (var msStream = new MemoryStream())
{
var encoder = new TEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(msStream);
return msStream.ToArray();
}
}
public static BitmapSource ReadBitmap(Stream imageStream)
{
BitmapDecoder bdDecoder = BitmapDecoder.Create(imageStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
return bdDecoder.Frames[0];
}