【问题标题】:Convert System.Drawing.Image to System.Windows.Controls.Image?将 System.Drawing.Image 转换为 System.Windows.Controls.Image?
【发布时间】:2011-01-25 12:12:25
【问题描述】:

在 C# 中有没有办法进行这种转换并返回?

我有一个带有图像控件的 WPF 应用程序。我正在尝试将该控件中的图像保存到 SQL 数据库。

在我的实体模型中,我的数据库中图片列的数据类型是byte[]。所以我找到了一种将 System.Drawing.Image 转换为 byte[] 并返回的方法。但我还没有找到从 System.Windows.Controls.Image 转换为byte[] 的方法。

这就是我现在需要进行上述转换的原因。

【问题讨论】:

    标签: c# wpf image type-conversion


    【解决方案1】:

    嗯,一个是图像,一个是显示图像的控件,所以我认为两者之间没有转换。但是,您可以将 ...Controls.Image 的 Source 设置为您的 ...Drawing.Image。

    根据更新编辑

    这是否满足您的需求 - http://msdn.microsoft.com/en-us/library/ms233764%28VS.100%29.aspx

    【讨论】:

    • 也不能这样做...有什么想法吗?
    • 你能提供更多关于你的场景的细节吗?我很难理解您为什么需要这样做。
    • @Tony:更新了有关如何将图像 (byte[]) 从数据库绑定到图像控件的链接。
    【解决方案2】:

    如果您有一个字节数组表示 WPF 可以解码的文件(bmp、jpg、gif、png、tif、ico),您可以执行以下操作:

    BitmapSource LoadImage(Byte[] imageData)
    {
        using (MemoryStream ms = new MemoryStream(imageData))
        {
            var decoder = BitmapDecoder.Create(ms,
                BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
            return decoder.Frames[0];
        }
    }
    

    同样,要将其转换回来,您可以执行以下操作:

    byte[] SaveImage(BitmapSource bitmap)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            var encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmap));
            encoder.Save(ms);
    
            return ms.GetBuffer();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多