这个问题在这里已有答案:
我想在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.DrawingImage
和Media.Imaging.BitmapSource
都没有发现任何东西。
谢谢你的回答!
这更像是黑客而不是直接转换:但它应该给出相同的结果:
基本上:
这是一个这样做的类:
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主窗口的网格中。
它呈现得很好:
参考:Msdn forums