【问题标题】:How to get a scalable image representation from WPF controls?如何从 WPF 控件中获取可缩放的图像表示?
【发布时间】:2014-06-21 04:19:58
【问题描述】:

我正在尝试将 WPF 中的文本轮廓“渲染”为富文本源。

在很多情况下,TextFormatter 类会做我想做的事,就像在这个 sn-p 中一样:

var tf = new Typeface(
  new System.Windows.Media.FontFamily("Pericles"),
  FontStyles.Normal,
  FontWeights.Normal,
  new FontStretch()
);

var brush = new SolidColorBrush(Colors.Black);

var ftext = new FormattedText(
  text,
  CultureInfo.CurrentCulture,
  FlowDirection.LeftToRight,
  tf,
  72,
  brush
);

var geometry = ftext.BuildGeometry(new Point());

在这里,我将一段文本转换为特定字体和大小的轮廓 (Geometry)。

FormattedText 类有一些限制。例如,无法获得FlowDocuments 的段落格式或Typography 类提供的OpenType 功能。与我可以使用 RichTextBox 或任意 ui 元素执行的操作相比,对渲染内容的控制通常要有限得多。

这就是为什么我正在寻找一种将任意 ui 元素(或至少是正确的 FlowDocuments)“渲染”为轮廓的方法,就像我在 sn-p 中处理普通文本一样。

我不是在寻找位图图像 - 我对可扩展的表示感兴趣,例如 Geometry 实例。

我怀疑这可能是因为我知道打印会将任意 xaml 转换为 可缩放 图像表示。我只是不希望它实际打印出来。

有人有什么想法吗?

【问题讨论】:

  • 你有什么样的富文本源?流文件? rtf?或其他。

标签: .net wpf fonts typesetting


【解决方案1】:

查看this link

基本上,你传入一个FlowDocument 对象,它返回一个FormattedText 对象。从那里你可以调用BuildGeometry

我相信无论您的富文本源是什么,它都可以轻松修改。

【讨论】:

  • 白痴我似乎没有正确阅读 FormattedText 文档。显然,我什至错过了漂亮的“Lorem ipsum”图片,这显然是富文本。剩下的问题是如何从任意 xaml 中获取轮廓,这也很有趣 - 但我稍后会为此提供另一个赏金。 (我需要再等一会儿才能获得赏金。)
【解决方案2】:

我想我自己找到了方法:

WPF 允许在 XpfDocument 中呈现,而无需将该文档打印或存储在磁盘上。它可以是在内存流上初始化的文档。然后“仅”重新打开它并解析其中的 xaml。

细节上可能有点棘手,但肯定有可能。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2012-03-23
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多