2010-01-20 61 views
0

我试图把图像,从一些文字产生,在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

从调试器,我可以告诉你,宽度和高度都是'0',这就是为什么不能创建的BitmapData的原因。 在我以前的Java世界中,我会打包pack()(或类似的东西)来强制组件布局。但在这里,似乎并不存在。那么,我怎样才能让我的组件可绘制? – Riduidel 2010-01-20 16:45:44

回答

1

你是对的;由于文本不在显示列表中,所以它从未被验证,因此具有0的高度和宽度。

典型的解决方法是将项添加到显示列表中,然后将其删除immediatley。在this SO question多一点讨论。

+0

注意,使用Flex 4,格兰aforementionned解决方案必须是一个小修改: Application.application已取代FlexGlobals.topLevelApplication 和的addChild,取而代之的addElement的被弃用。 无论如何,您的回复给了我所需的所有答案。非常感谢。 – Riduidel 2010-01-21 14:15:12

0

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