Save Java2D to SWF (flash)

I just got an example to work using the SpriteGraphics2D object from Adobe's Flex 3. FYI... Flex 3 is now open source.

(from SpriteGraphics2D javadoc) SpriteGraphics2D is a SWF specific implementation of Java2D's Graphics2D API. Calls to this class are converted into a TagList that can be used to construct a SWF Sprite.

I figured this out by looking at these two classes CubicCurveTest.java and SpriteTranscoder.java.

The only two jars needed to run this example are swfutils.jar and batik-awt-util.jar which can be downloaded here.

Here is my example code...

     // Create the SpriteGraphics2D object
     SpriteGraphics2D g = new SpriteGraphics2D(100, 100);

     // Draw on to the graphics object
     Font font = new Font("Serif", Font.PLAIN, 16);
     g.setFont(font);         
     g.drawString("Test swf", 30, 30);         
     g.draw(new Line2D.Double(5, 5, 50, 60));
     g.draw(new Line2D.Double(50, 60, 150, 40));
     g.draw(new Line2D.Double(150, 40, 160, 10));

     // Create a new empty movie
     Movie m = new Movie();
     m.version = 7;
     m.bgcolor = new SetBackgroundColor(SwfUtils.colorToInt(255, 255, 255));
     m.framerate = 12;
     m.frames = new ArrayList(1);
     m.frames.add(new Frame());
     m.size = new Rect(11000, 8000);

     // Get the DefineSprite from the graphics object
     DefineSprite tag = g.defineSprite("swf-test");

     // Place the DefineSprite on the first frame
     Frame frame1 = (Frame) m.frames.get(0);
     Matrix mt = new Matrix(0, 0);
     frame1.controlTags.add(new PlaceObject(mt, tag, 1, null));

     TagEncoder tagEncoder = new TagEncoder();
     MovieEncoder movieEncoder = new MovieEncoder(tagEncoder);
     movieEncoder.export(m);

     //Write to file
     FileOutputStream fos = new FileOutputStream(new File("/test.swf"));
     tagEncoder.writeTo(fos);

Mm, I know some libraries outputting Flash content, like or Ming, or even Haxe, a language which can be "translated" into JavaScript, Flash or PHP code... But I know no Java library.

Searching a bit (I am curious), I found a commercial Java Graph Library, probably closed source, a Flash player in Java, libraries to manipulate ActionScript source code or bytecode... Ah, the latter points to JavaSWF2 which is supposed to be able to generate SWF. I found also a DrawSWF which uses... JavaSWF2 library as back-end!

PS.: Also found Transform SWF. Looks promising.

Tags:

Java

Flash