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

Jak*_*ake 11 c# wpf image

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

小智 13

它的旧版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);
}
Run Code Online (Sandbox Code Playgroud)


And*_*are 0

请参阅如何在 WINFORMS 中使用 IMAGESOURCE(无处理程序)作为 SYSTEM.DRAWING.BITMAP (HBITMAP)

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