如何从Drawing.Image创建Media.ImageSource? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我想在Media.DrawingContext上渲染一个裁剪的图像。我想到了DrawingContext.DrawDrawing(Media.Drawing)方法,因为作为Media.Drawing我会通过Media.Drawing.ImageDrawing因为它的构造函数ImageDrawing(Media.ImageSource, Rect)允许选择ImageSource的一部分。

我的原始图像加载到Drawing.Image(如果需要可以从另一个类加载)。所以我想将我的Drawing.Image转换为Media.ImageSource

我研究了Media.ImageSource的派生类,但我在Media.DrawingImageMedia.Imaging.BitmapSource都没有发现任何东西。

谢谢你的回答!

c# .net wpf winforms
1个回答
1
投票

这更像是黑客而不是直接转换:但它应该给出相同的结果:

基本上:

  • 将图像保存为流
  • 回放流
  • 告诉Wpf图像使用流作为其流源

这是一个这样做的类:

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace StackCsWpf
{
    public class ImageUtils
    {
        public static ImageSource ToImageSource(System.Drawing.Image image, ImageFormat imageFormat)
        {
            BitmapImage bitmap = new BitmapImage();

            using (MemoryStream stream = new MemoryStream())
            {
                // Save to the stream
                image.Save(stream, imageFormat);

                // Rewind the stream
                stream.Seek(0, SeekOrigin.Begin);

                // Tell the WPF BitmapImage to use this stream
                bitmap.BeginInit();
                bitmap.StreamSource = stream;
                bitmap.CacheOption = BitmapCacheOption.OnLoad;
                bitmap.EndInit();
            }

            return bitmap;
        }
    }
}

现在作为一个例子,我可以使用上面的方法在Wpf图像组件中显示图像。

/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        System.Drawing.Image winFormImg = System.Drawing.Image.FromFile("leaves.jpg");
        Image1.Source = ImageUtils.ToImageSource(winFormImg, ImageFormat.Jpeg);
    }
}

Image1是一个简单的Wpf Image组件,我将其从工具箱拖到我的Wpf App主窗口的网格中。

它呈现得很好:

image conversion

参考:Msdn forums

© www.soinside.com 2019 - 2024. All rights reserved.