package org.freehep.graphicsio.emf.test; import java.awt.Color; import java.awt.Dimension; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Point; import java.awt.Rectangle; import java.io.FileOutputStream; import java.io.IOException; import java.util.Vector; import javax.swing.JPanel; import org.freehep.graphicsio.emf.EMFConstants; import org.freehep.graphicsio.emf.EMFHandleManager; import org.freehep.graphicsio.emf.EMFOutputStream; import org.freehep.graphicsio.emf.EMFTag; import org.freehep.graphicsio.emf.gdi.EOF; import org.freehep.graphicsio.emf.gdi.GDIComment; import org.freehep.graphicsio.emf.gdi.SetBkMode; import org.freehep.graphicsio.emf.gdi.SetMapMode; import org.freehep.graphicsio.emf.gdi.SetStretchBltMode; import org.freehep.graphicsio.emf.gdi.SetViewportExtEx; import org.freehep.graphicsio.emf.gdi.SetViewportOrgEx; import org.freehep.graphicsio.emf.gdi.SetWindowExtEx; import org.freehep.graphicsio.emf.gdi.SetWindowOrgEx; import org.freehep.graphicsio.emf.gdi.StretchDIBits; import org.freehep.util.images.ImageHandler; import org.freehep.util.images.ImageUtilities; public class EMFTest extends JPanel { public EMFTest() { } public void run() throws IOException { Rectangle bounds = new Rectangle(0, 0, 800, 600); /* Point p1[][] = { { new Point(40, 50), new Point(160, 170), new Point(80, 30) } }; Point p2[] = { new Point(20, 20), new Point(40, 60), new Point(30, 50), new Point(00, 60) }; */ Vector emf = new Vector(); emf.add(new GDIComment("Settings")); emf.add(new SetMapMode(SetMapMode.MM_ANISOTROPIC)); emf.add(new SetBkMode(SetBkMode.BKG_TRANSPARENT)); emf.add(new SetWindowOrgEx(new Point(0, 0))); emf.add(new SetViewportOrgEx(new Point(0, 0))); emf.add(new SetWindowExtEx(new Dimension(bounds.width, bounds.height))); emf .add(new SetViewportExtEx(new Dimension(bounds.width, bounds.height))); /* * emf.add(new SaveDC()); * * emf.add(new GDIComment("Polygon")); LogBrush32 brush = new * LogBrush32(LogBrush32.BS_SOLID, Color.red, 0); emf.add(new * CreateBrushIndirect(1, brush)); emf.add(new SelectObject(1)); * ExtLogPen pen1 = new ExtLogPen(ExtLogPen.PS_GEOMETRIC | * ExtLogPen.PS_SOLID | ExtLogPen.PS_ENDCAP_ROUND | * ExtLogPen.PS_JOIN_ROUND, 5, ExtLogPen.BS_SOLID, Color.green, 0, new * int[0]); emf.add(new ExtCreatePen(2, pen1)); emf.add(new * SelectObject(2)); emf.add(new SetMiterLimit(10)); emf.add(new * PolyPolygon(bounds, p1)); emf.add(new DeleteObject(1)); emf.add(new * DeleteObject(2)); * * emf.add(new GDIComment("Polyline")); emf.add(new * ModifyWorldTransform(new AffineTransform(1, 0, 0, 1, 200, 0), * ModifyWorldTransform.MWT_LEFTMULTIPLY)); ExtLogPen pen2 = new * ExtLogPen(ExtLogPen.PS_GEOMETRIC | ExtLogPen.PS_SOLID | * ExtLogPen.PS_ENDCAP_ROUND | ExtLogPen.PS_JOIN_ROUND, 5, * ExtLogPen.BS_SOLID, Color.blue, 0, new int[0]); emf.add(new * ExtCreatePen(1, pen2)); emf.add(new SelectObject(1)); emf.add(new * SetMiterLimit(10)); emf.add(new Polyline(bounds, p2)); emf.add(new * DeleteObject(1)); * * emf.add(new GDIComment("Ellipse")); emf.add(new * ModifyWorldTransform(new AffineTransform(1, 0, 0, 1, 200, 0), * ModifyWorldTransform.MWT_LEFTMULTIPLY)); ExtLogPen pen3 = new * ExtLogPen(ExtLogPen.PS_GEOMETRIC | ExtLogPen.PS_SOLID | * ExtLogPen.PS_ENDCAP_ROUND | ExtLogPen.PS_JOIN_ROUND, 5, * ExtLogPen.BS_SOLID, Color.orange, 0, new int[0]); emf.add(new * ExtCreatePen(1, pen3)); emf.add(new SelectObject(1)); emf.add(new * SetMiterLimit(10)); emf.add(new Ellipse(new Rectangle(20,20,50,30))); * emf.add(new DeleteObject(1)); * * emf.add(new RestoreDC()); * * emf.add(new GDIComment("Arc")); emf.add(new ModifyWorldTransform(new * AffineTransform(1, 0, 0, 1, 0, 200), * ModifyWorldTransform.MWT_LEFTMULTIPLY)); ExtLogPen pen4 = new * ExtLogPen(ExtLogPen.PS_GEOMETRIC | ExtLogPen.PS_SOLID | * ExtLogPen.PS_ENDCAP_ROUND | ExtLogPen.PS_JOIN_ROUND, 5, * ExtLogPen.BS_SOLID, Color.cyan, 0, new int[0]); emf.add(new * ExtCreatePen(1, pen4)); emf.add(new SelectObject(1)); emf.add(new * SetMiterLimit(10)); emf.add(new AngleArc(new Point(100,100), 50, 20, * 280)); emf.add(new DeleteObject(1)); * * emf.add(new GDIComment("Image")); emf.add(new * ModifyWorldTransform(new AffineTransform(1, 0, 0, 1, 0, 200), * ModifyWorldTransform.MWT_LEFTMULTIPLY)); */ MediaTracker t = new MediaTracker(this); Image image = ImageHandler.getImage("BrokenCursor.gif", getClass()); t.addImage(image, 0); try { t.waitForAll(); } catch (InterruptedException e) { e.printStackTrace(); } emf.add(new SetStretchBltMode(EMFConstants.COLORONCOLOR)); emf.add(new StretchDIBits( bounds, 0, 0, image.getWidth(this), image.getHeight(this), ImageUtilities.createBufferedImage(image, this, Color.BLACK), Color.BLACK)); /* * emf.add(new GDIComment("Text")); emf.add(new ModifyWorldTransform(new * AffineTransform(1, 0, 0, 1, 0, 200), * ModifyWorldTransform.MWT_LEFTMULTIPLY)); * * LogFontW font = new LogFontW(-82, 0, 0, 0, 265, false, false, false, * 0xCC, 7, 2, 1, 0x22, "Arial TUR"); Panose panose = new Panose(); * ExtLogFontW extFont = new ExtLogFontW(font, "", "", 0, 0, 0, new * byte[] {0, 0, 0, 0}, 0, panose); emf.add(new * ExtCreateFontIndirectW(1, extFont)); * * emf.add(new SelectObject(1)); Text text = new Text(new Point (0, 0), * "Test", Text.ETO_OPAQUE, bounds); emf.add(new ExtTextOutA(new * Rectangle(0,0,100,100), ExtTextOutA.GM_COMPATIBLE, 100, 100, text)); * emf.add(new DeleteObject(1)); * */ emf.add(new GDIComment("End")); emf.add(new EOF()); EMFOutputStream out = new EMFOutputStream(new FileOutputStream( "EMFTest.emf"), bounds, new EMFHandleManager(), "EMFTest", "TestFile", new Dimension(1024, 768)); for (int i = 0; i < emf.size(); i++) { out.writeTag((EMFTag) emf.get(i)); } out.close(); } public static void main(String[] args) throws IOException { EMFTest test = new EMFTest(); test.run(); System.exit(0); } }