What is the best way to render to a UIComponent which hasn’t been added to the stage? (I’m using UIComponents as renderers for objects, and want to render new copies for image export, filtering, etc.)
Two strategies I’ve seen/used so far include realizing the component to ensure it calls all the lifecycle methods:
-
Add the component to
Application.application, render with BitmapData.draw(), remove component. This is similar to what I’ve seen done for printing unrealized components as well. -
Add the component to a pop up window, render with BitmapData.draw(), dismiss popup after rendering complete.
I believe both of these just rely on the UI not refreshing while the current thread/event is executing, though (1) could also rely on the component being realized out of view.
Is there a better way?
What I’ve used in the past with much success is the following:
I’ve used this to snapshot various Flex charting components for use in PDF’s generated on the server side. After getting the BitmapData I use the PNGEncoder or JPEGEncoder classes to compress the data, then encode it in Base64 before uploading to the server.