Search code examples
javaflash

Save Java2D to SWF (flash)


I'm trying to save the output of an vector image drawin in Java2D to an SWF file. There are great libraries for saving java2D output as things like SVG (BATIK) and PDF(itext) but I can't find one for SWF. Any ideas?


Solution

  • 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);