参考资料中ImageSource的System.Drawing.Image

我的问题与这个问题非常相似: wpf图像资源和运行时wpf控件中的图像更改 ,但略有不同。

这是我的ResourceDictionary.xaml:

 Images/disconnect.png Images/tick.png Images/x.png 

至于后面的C#代码,我可以使用以下内容从资源加载ImageSource。 在其中,我能够看到元数据和图像名称,但无法弄清楚如何将其放入System.Drawings.Image中。

 var imageSource = (ImageSource)Application.Current.FindResource("Synced"); System.Drawing.Image img = Image.FromFile(???) 

我试图将其转换为System.Drawing.Image的原因是将其发送到打印机。

谢谢!

在WPF中,每个UI元素都扩展了Visual Class ,它在WPF中提供了渲染支持 。 还有一个RenderTargetBitmap类 ,它具有一个Render方法 ,该方法将Visual对象作为输入参数。 因此,您可以将ImageSource设置为ImageSource属性,并简单地将Image渲染为Bitmap图像:

 Image yourImageObject = new Image(); yourImageObject.Source = yourImageSource; RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default); renderTargetBitmap.Render(yourImageObject); // Save to .png file PngBitmapEncoder pngBitmapEncoder = new PngBitmapEncoder(); pngBitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); using (Stream stream = File.Create(filepath)) { pngBitmapEncoder.Save(stream); } 

由于这在互联网上有详细记载,我不打算在这里重复整个故事。 要查看完整的故事,请参阅Dot NET Tricks网站上的如何渲染位图或在WPF中打印视觉 ,这也将帮助您满足打印要求。