gpt4 book ai didi

c# - 将 RenderTargetBitmap 转换为 System.Drawing.Image

转载 作者:太空狗 更新时间:2023-10-29 23:02:16 24 4
gpt4 key购买 nike

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

对于“普通”BMP 图像,它可以工作,但我不知道如何转换 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

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

最佳答案

您可以将 RenderTargetBitmap 中的像素直接复制到新 Bitmap 的像素缓冲区中。请注意,我假设您的 RenderTargetBitmap 使用 PixelFormats.Pbrga32,因为使用任何其他像素格式都会从 RenderTargetBitmap 的构造函数中抛出异常>.

var bitmap = new Bitmap(renderTarget.PixelWidth, renderTarget.PixelHeight,
PixelFormat.Format32bppPArgb);

var bitmapData = bitmap.LockBits(new Rectangle(Point.Empty, bitmap.Size),
ImageLockMode.WriteOnly, bitmap.PixelFormat);

renderTarget.CopyPixels(Int32Rect.Empty, bitmapData.Scan0,
bitmapData.Stride*bitmapData.Height, bitmapData.Stride);

bitmap.UnlockBits(bitmapData);

关于c# - 将 RenderTargetBitmap 转换为 System.Drawing.Image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com