【问题标题】:WPF Copy image of control to bitmapWPF将控件的图像复制到位图
【发布时间】:2015-08-20 13:54:59
【问题描述】:

我正在使用第三方控件,我想从该控件创建位图(放在剪贴板上或保存到 png)。

我尝试过使用RenderBitmapTarget,但它只会复制在屏幕上呈现的控件(我的网格比屏幕大)。

我的RenderBitmapTarget 代码如下所示:

RenderTargetBitmap rtb = new RenderTargetBitmap((int)control.ActualWidth, (int)control.ActualHeight, 96, 96, PixelFormats.Pbgra32);
rtb.Render(control);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
MemoryStream stream = new MemoryStream();
png.Save(stream);
Image image = Image.FromStream(stream);

我尝试过指定更大的尺寸(都在RenderTargetBitmap 构造函数中,并为控件指定了新的宽度/高度,但两者都只是在更大的画布上产生了相同的图像。

有什么想法吗?

【问题讨论】:

  • 你试过这个技巧吗? stackoverflow.com/questions/5189139/…
  • 类似...我最终将控件的高度和宽度设置为 double.NaN(即“自动”)调用它的 UpdateLayout 函数,然后渲染到 RenderTargetBitmap。我会在允许时发布解决方案。
  • 感谢您发布解决方案。

标签: c# wpf


【解决方案1】:

这就是我最终的结果......

        tempWidth = myControl.ActualWidth;
        tempHeight = myControl.ActualHeight;

        myControl.Width = double.NaN;
        myControl.Height = double.NaN;

        myControl.UpdateLayout();

        RenderTargetBitmap rtb = new RenderTargetBitmap((int)myControl.ActualWidth, (int)myControl.ActualHeight, 96, 96, PixelFormats.Pbgra32);

        rtb.Render(myControl);

        PngBitmapEncoder pbe = new PngBitmapEncoder();
        pbe.Frames.Add(BitmapFrame.Create(rtb));
        MemoryStream stream = new MemoryStream();
        pbe.Save(stream);
        image = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(stream);

        CEGrid.Width = tempWidth;
        CEGrid.Height = tempHeight;

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2015-08-11
    • 2013-11-15
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多