2010-01-20 44 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是否可見並不重要。