0

我想实现以下两个服务:(使用 web api )

  1. 从服务器获取图片。
  2. 将新图片添加到服务器。

服务器将图片存储在 DB iun varbinary 中。图片可以是bmp、jpg、ico

我的函数签名是

AddIcon(string Id, byte[] IconFile)

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

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

1 回答 1

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];
    }
于 2012-12-30T11:00:30.933 回答