【问题标题】:Render a hidden canvas without showing it?渲染隐藏的画布而不显示它?
【发布时间】:2016-01-21 16:09:46
【问题描述】:

我想将画布作为 PNG 图像存储在磁盘上。

当使用此代码完全显示画布时,此方法有效:

RenderTargetBitmap rtb = new RenderTargetBitmap(794, 1122, 96d, 96d, System.Windows.Media.PixelFormats.Default);
rtb.Render(canvas);

但当时没有显示的部分不会被渲染。 如果根本不显示视觉对象,则不会渲染任何内容。

那我怎样才能在不显示的情况下将 Canvas 构建代码保存到光盘?

【问题讨论】:

  • 不,它没有。这与我目前使用的代码相同。 UpdateLayout() 也没有修复它
  • 我能想到的唯一解决方案是将我的 Canvas 放在 FlowDocument 中并保存。
  • 画布必须得到一个布局,see here
  • Measure() 和 Arrange() 成功了。但我的 PNG 仍然主要是黑色的。似乎它没有使用我的画布的白色背景画笔..?

标签: .net wpf


【解决方案1】:

好的,我已经在 heltonbiker 和 Clemens 的帮助下解决了这个问题。

var size = new Size(794, 122);
Document.Measure(size);
Document.Arrange(new Rect(size));

Document.UpdateLayout();

RenderTargetBitmap rtb = new RenderTargetBitmap(794, 1122, 96d, 96d, System.Windows.Media.PixelFormats.Default);
rtb.Render(Document);

但是当我将画布保存到光盘时,它的背景是黑色的。我通过在 Canvas 内的 XAML 中添加 Rectangle 解决了这个问题。

【讨论】:

  • 答案代码不完整,很难理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2014-02-03
相关资源
最近更新 更多