2010-01-20 3 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); 

Unfortunatly, при вызове, он отображает стек ошибок

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

ответ

1

Вы правы; поскольку текст отсутствует в списке отображения, он никогда не проверяется и, следовательно, имеет 0 высоты и ширины.

Типичным обходным путем является добавление элемента в список отображения, а затем его удаление немедленно. Немного больше обсуждений в this SO question.

+0

Обратите внимание, что с помощью Flex 4 вышеупомянутое решение должно быть немного изменено: Application.application был заменен на FlexGlobals.topLevelApplication , а addChild устарел в пользу addElement. В любом случае, ваш ответ дал мне все ответы, которые мне были нужны. Большое спасибо. – Riduidel

0

Вы должны проследить txt.width и txt.height. Они должны быть как минимум больше или равны одному. Неважно, отображается ли DisplayObject или нет.

Смежные вопросы