【问题标题】:Generate a flex image from a hidden component从隐藏的组件生成弹性图像
【发布时间】:2011-01-07 08:43:35
【问题描述】:

我正在尝试将由一些文本生成的图像放在RichEditableText 中。由于它是一个带样式的文本,我想把它放在另一个 RichEditableText 上,设置它的样式,然后将它打印到 Bitmap 以用作 InlineGraphicsElement 的源。

我使用以下代码来做到这一点

var txt:RichEditableText = new RichEditableText();
txt.text = name;
// Appliy given styles to the text flow of input rich editable text
createApplyNamedStyle(name, styles).call(null, txt.textFlow);
var bitmapData:BitmapData = new BitmapData(txt.width, txt.height);
bitmapData.draw(txt);
var bitmap:Bitmap = new Bitmap(bitmapData);

不幸的是,当被调用时,它会显示一个错误堆栈

ArgumentError: Error #2015: BitmapData non valide.
at flash.display::BitmapData()
at RichTextEditor/getTagImage()[E:\FlexWorkspace\Test\src\RichTextEditor.mxml:74]
at RichTextEditor/insertTag()[E:\FlexWorkspace\Test\src\RichTextEditor.mxml:154]

我怀疑这是因为我的 RichEditableText(不在可见组件中)没有布局。 如何确保布局正确?

我是否在做正确的事情来将我的文本转换为图像?

【问题讨论】:

  • 从调试器中,我可以告诉你宽度和高度都是0,这就是无法创建BitmapData的原因。在我以前的 Java 世界中,我会调用 pack()(或类似的东西)来强制组件布局。但在这里,它似乎并不存在。那么,我怎样才能让我的组件可绘制呢?

标签: apache-flex flex4 capture


【解决方案1】:

你是对的;由于文本不在显示列表中,因此它从未经过验证,因此高度和宽度为 0。

典型的解决方法是将项目添加到显示列表,然后立即将其删除。在this SO question 进行更多讨论。

【讨论】:

  • 请注意,对于 Flex 4,上述解决方案必须稍作修改:Application.application 已被 FlexGlobals.topLevelApplication 取代,而 addChild 已被弃用,取而代之的是 addElement。不管怎样,你的回复给了我所有我需要的答案。非常感谢。
【解决方案2】:

您应该跟踪 txt.width 和 txt.height。它们必须至少大于或等于一。 DisplayObject 是否可见并不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多