标签: rendertargetbitmap

将RenderTargetBitmap转换为System.Drawing.Image

我有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);
Run Code Online (Sandbox Code Playgroud)

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

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

c# wpf system.drawing bitmapimage rendertargetbitmap

5
推荐指数
2
解决办法
8868
查看次数

使用RenderTargetBitmap创建WPF Canvas区域的快照

我想在我的应用程序中创建一个Canvas区域的快照.我正在使用Visual Brush来获取快照并使用PngEncoder保存它.但是生成的PNG只是一个空白的黑色图像.我不确定问题是创建的BitmapSource还是PNGEncoder问题.这是我用来获取相同代码的代码.

public void ConvertToBitmapSource(UIElement element)
{
    var target = new RenderTargetBitmap((int)(element.RenderSize.Width), (int)(element.RenderSize.Height), 96, 96, PixelFormats.Pbgra32);
    var brush = new VisualBrush(element);

    var visual = new DrawingVisual();
    var drawingContext = visual.RenderOpen();


    drawingContext.DrawRectangle(brush, null, new Rect(new Point(0, 0),
    new Point(element.RenderSize.Width, element.RenderSize.Height)));

    drawingContext.Close();

    target.Render(visual);

    PngBitmapEncoder encoder = new PngBitmapEncoder();
    BitmapFrame outputFrame = BitmapFrame.Create(target);
    encoder.Frames.Add(outputFrame);
    using (FileStream file = File.OpenWrite("TestImage.png"))
    {
         encoder.Save(file);
    }

}   
Run Code Online (Sandbox Code Playgroud)

wpf png snapshot rendertargetbitmap

4
推荐指数
2
解决办法
1万
查看次数

如何使用图形对象渲染 WPF Hwnd

之后RenderTargetBitmap就太慢了。我尝试了一种不同的方法。不幸的是我的尝试没有成功。希望你们中的一些人能够弄清楚为什么这段代码不起作用。

  var myPopup = new Popup();
            var child = new Grid() { Background = new VisualBrush(myVisual)};
            myPopup.StaysOpen = false;
            myPopup.Child = child;
            myPopup.IsOpen = false;

            myPopup.Opened += (sender, args) =>
            {
                var source = ((HwndSource)PresentationSource.FromVisual(myPopup.Child));
                var image = new Bitmap(1000,1000);
                using (Graphics gr = Graphics.FromHwnd(source.Handle))
                {
                    var ptr = gr.GetHdc();

                    using (Graphics g = Graphics.FromHdc(ptr))
                    {
                        g.DrawImage(image, new System.Drawing.Point(0, 0));
                    }
                    gr.ReleaseHdc(ptr);
                }
                //The image is just black...
                image.Save("test.png");

                myPopup.IsOpen = false;
            };
            myPopup.IsOpen = true;
Run Code Online (Sandbox Code Playgroud)

c# wpf graphics render rendertargetbitmap

4
推荐指数
1
解决办法
2514
查看次数

向RenderTargetBitmap添加可选的硬件加速

有没有替代RenderTargetBitmap可以生成一个与Image.Source一起使用的图像并且在.NET 3.5 sp1中是硬件加速的吗?.NET 4.0的答案很好,但我可能无法使用它们.

如果人们发现它会对我有帮助,那么他们应该为此投票.

http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/1303525-add-optional-hardware-acceleration-to-rendertarget

hardware silverlight wpf acceleration rendertargetbitmap

2
推荐指数
1
解决办法
1330
查看次数

异步将WPF可视化呈现为位图

我看到WinRT RenderTargetBitmap能够通过"RenderAsync(visual);"异步呈现Visual.方法.不幸的是.net RendertargetBitmap 没有RenderAsync方法..net RenderTargetBitmap是否有任何变通方法或扩展,以允许WPF视觉效果的异步呈现?提前感谢您的帮助!

c# wpf asynchronous rendertargetbitmap async-await

1
推荐指数
1
解决办法
1169
查看次数