如何向/从服务器发送图像文件

时间:2012-12-30 10:39:10

标签: c# sql-server bitmap sql-server-2012

我想实现以下两项服务:  (使用web api处理此事)

  1. 从服务器获取图片。
  2. 将新图片添加到服务器。
  3. 服务器将图片存储在DB iun varbinary中。 图片可以是bmp,jpg,ico

    我的功能签名是

    AddIcon(string Id, byte[] IconFile)
    

    然后我想把它插入数据库。 现在,如果我通过我的DTO传递BitmapImage,我需要引用许多对象,我不认为这是最佳实践。这就是为什么我更喜欢byte []。

    1. 有没有办法在不知道其结构的情况下将BitmapImage转换为Byte []?
    2. 检索文件时,是否有办法将Byte []转换回BitmapImage而不知道其结构(如从磁盘加载时) 感谢。

1 个答案:

答案 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];
    }