首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RenderTargetBitmap问题

RenderTargetBitmap问题
EN

Stack Overflow用户
提问于 2010-08-31 13:55:09
回答 2查看 2.4K关注 0票数 0

我正在尝试将用户控件的图像添加到viewbox中。我正在动态创建用户控件。我正在使用下面的代码。

代码语言:javascript
复制
private static RenderTargetBitmap CaptureScreen(Visual target, double dpiX, double dpiY)
{
    if (target == null)
    {
        return null;
    }
    Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
    //RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width * dpiX / 96.0),
    //                                                (int)(bounds.Height * dpiY / 96.0),
    //                                                dpiX,
    //                                                dpiY,
    //                                                PixelFormats.Pbgra32);
    RenderTargetBitmap rtb = new RenderTargetBitmap(596,596,dpiX,
                                                    dpiY,
                                                    PixelFormats.Pbgra32);
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext ctx = dv.RenderOpen())
    {
        VisualBrush vb = new VisualBrush(target);
        ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
    }
    rtb.Render(dv);
    return rtb;
}

我正在动态创建用户控件,并将其传递给捕获屏幕方法。

代码语言:javascript
复制
UserControls.UserControl1 uc1 = new UserControls.UserControl1();
                        visualList.Add(uc1);
 for(int i = 0;i<=6;i++)
        {
            Image img = new Image();
            img.Source = CaptureScreen(visualList[i], 96, 96);
            img.Margin = new Thickness { Top = 2 };                   
            usingWorkaround.Children.Add(img);
        }

VisualTreeHelper.GetDescendantBounds(目标)返回空边界。这就是为什么不能创建屏幕图像的原因。有没有其他方法来捕获动态创建的用户控件的屏幕?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-31 14:09:41

当您尝试创建图像时,这些控件还不存在于可视化树中,并且大小尚未计算。

您需要首先在视觉上调用MeasureArrange

票数 0
EN

Stack Overflow用户

发布于 2013-10-23 17:46:46

您可以调用Measure并按如下方式进行安排

代码语言:javascript
复制
  private void ForceUpdate(FrameworkElement element, double width, double height)
  {
     Size size = new Size(width, height);

     element.Measure(size);

     element.Arrange(new Rect(0, 0, width, height));

     element.UpdateLayout();
  }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3606368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档