将 RenderTargetBitmap 转换为 System.Drawing.Image [英] Convert RenderTargetBitmap into System.Drawing.Image

查看:50
本文介绍了将 RenderTargetBitmap 转换为 System.Drawing.Image的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 3D WPF 视觉效果,我想将其传递到 Excel 单元格中(通过剪贴板缓冲区).

I have 3D WPF visual that I want to pass into an Excel cell (via clipboard buffer).

使用普通"BMP 图像它可以工作,但我不知道如何转换 RenderTargetBitmap.

With "normal" BMP images it works but I do not know how to convert a RenderTargetBitmap.

我的代码如下所示:

System.Windows.Media.Imaging.RenderTargetBitmap renderTarget = myParent.GetViewPortAsImage(DiagramSizeX, DiagramSizeY);
System.Windows.Controls.Image myImage = new System.Windows.Controls.Image();
myImage.Source = renderTarget;

System.Drawing.Bitmap pg = new System.Drawing.Bitmap(DiagramSizeX, DiagramSizeY);
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(pg);
gr.DrawImage(myImage, 0, 0);

System.Windows.Forms.Clipboard.SetDataObject(pg, true);
sheet.Paste(range);

我的问题是 gr.DrawImage 不接受 System.Windows.Controls.ImageSystem.Windows.Media.Imaging.RenderTargetBitmap;只有一个System.Drawing.Image.

My problem is that gr.DrawImage does not accept a System.Windows.Controls.Image or a System.Windows.Media.Imaging.RenderTargetBitmap; only a System.Drawing.Image.

如何将Controls.Image.Imaging.RenderTargetBitmap 转换成Image,或者有什么更简单的方法?

How do I convert the Controls.Image.Imaging.RenderTargetBitmap into an Image, or are there any easier ways?

推荐答案

这是我想出的解决方案

System.Windows.Media.Imaging.RenderTargetBitmap renderTarget = myParent.GetViewPortAsImage(DiagramSizeX, DiagramSizeY);
System.Windows.Media.Imaging.BitmapEncoder encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();
MemoryStream myStream = new MemoryStream();

encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(renderTarget));
encoder.Save(myStream);
//
System.Drawing.Bitmap pg = new System.Drawing.Bitmap(DiagramSizeX, DiagramSizeY);
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(pg);
//
// Background
//
gr.FillRectangle(new System.Drawing.SolidBrush(BKGC), 0, 0, DiagramSizeX, DiagramSizeY);
//
gr.DrawImage(System.Drawing.Bitmap.FromStream(myStream), 0, 0);
System.Windows.Forms.Clipboard.SetDataObject(pg, true);

sheet.Paste(range);

这篇关于将 RenderTargetBitmap 转换为 System.Drawing.Image的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆