将System.Windows.Media.ImageSource转换为System.Drawing.Bitmap

如何将System.Windows.Media.ImageSource转换为C#中的System.Drawing.Bitmap?

它的旧OP,但它仍然可以为其他人带来便利,因为它需要一些时间来找到没有DLL互操作或剪贴板黑客的清洁解决方案。

这对我有用,你可以使用pngencoder在保存到文件或rtf流之前剪切图像大小

private System.Drawing.Image ImageWpfToGDI(System.Windows.Media.ImageSource image) { MemoryStream ms = new MemoryStream(); var encoder = new System.Windows.Media.Imaging.BmpBitmapEncoder(); encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(image as System.Windows.Media.Imaging.BitmapSource)); encoder.Save(ms); ms.Flush(); return System.Drawing.Image.FromStream(ms); } 

请参阅如何在WINFORMS中使用IMAGESOURCE(NO HANDLER)作为SYSTEM.DRAWING.BITMAP(HBITMAP) :

如何轻松地将WinForms System.Drawing.Bitmap转换为您从本文中学到的WPF ImageSource。 今天,我将解释如何做到这一点。 实际上,他所要做的就是从BitmapSource中提取处理程序,但是,这种方法不受支持,因此我们唯一能做的就是将BitmapSource(或BitmapFrame)的像素复制到字节数组中,然后将它们复制到指针中。 HBITMAP。