Flex: Представить неосуществленный UIComponent к BitmapData?

Если Вы не воспроизвели ошибку, Ваша "фиксация" - ничто лучше, чем предположение.

6
задан Michael Brewer-Davis 21 August 2009 в 19:36
поделиться

3 ответа

В прошлом я с большим успехом использовал следующее:

  1. Создайте новый экземпляр вашего компонента
  2. Добавьте прослушиватель событий для FlexEvent.CREATION_COMPLETE
  3. Set visible = false для компонента
  4. Добавьте компонент как дочерний для основного приложения
  5. Когда компонент будет создан, будет вызвана функция прослушивателя событий. Остальная логика должна быть вставлена ​​/ вызвана из вашей функции прослушивателя событий.
  6. Удалите прослушиватель событий, который вы добавили на шаге 2.
  7. Используйте ImageSnapshot.captureImage () или captureBitmapData () для захвата визуального представления компонент.
  8. Удаление компонента из основного приложения
  9. Обработка данных изображения по мере необходимости.

Я использовал это для создания моментальных снимков различных компонентов диаграмм Flex для использования в файлах PDF, созданных на стороне сервера.

10
ответ дан 8 December 2019 в 18:39
поделиться

Я почти уверен, что вы можете использовать метод draw () в BitmapData без вашего компонента в DisplayList.

Например, используйте его, когда мне нужно изменить изображения, которые я загружаю класс загрузчика. В обработчике инициализации я создаю экземпляр BitmapData и рисую Bitmap из свойства loadInfo.content, затем copyPixels () или что-то еще, что мне нужно для изменения загруженного изображения

2
ответ дан 8 December 2019 в 18:39
поделиться

Так много о UIComponent Макет может быть привязан к его контексту. Это особенно верно для многих его производных (например, HBox), поскольку гибкость макета привязана к его родительскому размеру и количеству братьев и сестер, разделяющих его родительское пространство.

Кроме того, Flex может быть реальным ] боль получить визуально обновить. Часто критические функции рендеринга не выполняются синхронно ... есть callLater , callLater2 и другие хитрые подходы, которые заставляют работать с автоматическими свойствами макета UIComponents ] сильная головная боль. Даже вызов validateNow или updateDisplayList не может гарантировать, что макет будет правильным в текущем кадре (вместо нескольких кадров в будущем).

Я предлагаю вам лучшее. можно не использовать UIComponent , а попробовать использовать Sprite или другой.

Ваш способ прикрепить его, но сделать его невидимым ( alpha = 0 , mouseEnabled = false , mouseChildren = false ) вполне приемлемо. Вы должны прослушать обратный вызов FlexEvent.CREATION_COMPLETE , прежде чем убедитесь, что он правильно построен. Затем вы можете bitmapData.draw его, а затем удалить со сцены. Если вы должны использовать UIComponents, то я не знаю лучшего способа.

Лучшее, что вы можете сделать, это не использовать UIComponent , а попробовать использовать Sprite или что-то еще.

Ваш способ прикрепить его, но сделать его невидимым ( alpha = 0 , mouseEnabled = false , mouseChildren = false ) вполне приемлемо. Вы должны прослушать обратный вызов FlexEvent.CREATION_COMPLETE , прежде чем убедитесь, что он правильно построен. Затем вы можете bitmapData.draw его, а затем удалить со сцены. Если вы должны использовать UIComponents, то я не знаю лучшего способа.

Лучшее, что вы можете сделать, это не использовать UIComponent , а попробовать использовать Sprite или что-то еще.

Ваш способ прикрепить его, но сделать его невидимым ( alpha = 0 , mouseEnabled = false , mouseChildren = false ) вполне приемлемо. Вы должны прослушать обратный вызов FlexEvent.CREATION_COMPLETE , прежде чем убедитесь, что он правильно построен. Затем вы можете bitmapData.draw его, а затем удалить со сцены. Если вы должны использовать UIComponents, то я не знаю лучшего способа.

Вы должны прослушать обратный вызов FlexEvent.CREATION_COMPLETE , прежде чем убедитесь, что он правильно построен. Затем вы можете bitmapData.draw его, а затем удалить со сцены. Если вы должны использовать UIComponents, то я не знаю лучшего способа.

Вы должны прослушать обратный вызов FlexEvent.CREATION_COMPLETE , прежде чем убедитесь, что он правильно построен. Затем вы можете bitmapData.draw его, а затем удалить со сцены. Если вы должны использовать UIComponents, то я не знаю лучшего способа.

1
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: