Packages

 

com.aspose.imaging.fileformats.emf.graphics

Class EmfRecorderGraphics2D



  • public final class EmfRecorderGraphics2D
    extends MetafileRecorderGraphics2D

    The Emf recorder graphics

    See Also:
    MetafileRecorderGraphics2D
    Code example:

    This example shows how to create a EMF image and draw some geometric shapes on it using EmfRecorderGraphics2D.


    String dir = "c:\\temp\\";
    
    // The image size in pixels
    int deviceWidth = 600;
    int deviceHeight = 400;
    
    // The image size in millimeters
    int deviceWidthMm = (int) (deviceWidth / 100f);
    int deviceHeightMm = (int) (deviceHeight / 100f);
    
    com.aspose.imaging.Rectangle frame = new com.aspose.imaging.Rectangle(0, 0, deviceWidth, deviceHeight);
    
    // Create a EMF image.
    com.aspose.imaging.fileformats.emf.graphics.EmfRecorderGraphics2D graphics =
            new com.aspose.imaging.fileformats.emf.graphics.EmfRecorderGraphics2D(
                    frame,
                    new com.aspose.imaging.Size(deviceWidth, deviceHeight),
                    new com.aspose.imaging.Size(deviceWidthMm, deviceHeightMm));
    
    // Draw a black rectangle along the image borders using a 1-pixel-wide black pen.
    graphics.drawRectangle(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getBlack(), 1), 0, 0, deviceWidth, deviceHeight);
    
    // Fill a rectangle with the color of white-smoke.
    graphics.fillRectangle(
            new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getWhiteSmoke()),
            new com.aspose.imaging.Rectangle(10, 10, 580, 380));
    
    // Draw two diagonal lines using a 1-pixel-wide darkgreen pen.
    graphics.drawLine(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getDarkGreen(), 1), 0, 0, deviceWidth, deviceHeight);
    graphics.drawLine(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getDarkGreen(), 1), 0, deviceHeight, deviceWidth, 0);
    
    // Draw an arc within the rectangle {0, 0, 200, 200} using a 2-pixel-wide blue pen.
    graphics.drawArc(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getBlue(), 2), new com.aspose.imaging.Rectangle(0, 0, 200, 200), 90, 270);
    
    // Fill an arc
    graphics.fillPie(
            new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getLightSkyBlue()),
            new com.aspose.imaging.Rectangle(0, 0, 150, 150), 90, 270);
    
    // Draw a cubic bezier using a 2-pixel-wide red pen.
    graphics.drawCubicBezier(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getRed(), 2),
            new com.aspose.imaging.Point(0, 0),
            new com.aspose.imaging.Point(200, 133),
            new com.aspose.imaging.Point(400, 166),
            new com.aspose.imaging.Point(600, 400));
    
    // Draw a raster image of the specified size at the specified location.
    // The image is scaled to fit the desired rectangle.
    com.aspose.imaging.RasterImage imageToDraw = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(dir + "sample.bmp");
    try {
        graphics.drawImage(imageToDraw,
                new com.aspose.imaging.Rectangle(400, 200, 100, 50),
                new com.aspose.imaging.Rectangle(0, 0, deviceWidth, deviceHeight),
                com.aspose.imaging.GraphicsUnit.Pixel);
    } finally {
        imageToDraw.dispose();
    }
    
    // Draw a text string
    graphics.drawString("Hello World!",
            new com.aspose.imaging.Font("Arial", 48, com.aspose.imaging.FontStyle.Regular),
            com.aspose.imaging.Color.getDarkRed(), 200, 300);
    
    // Create a path to fill
    com.aspose.imaging.Figure figureToFill = new com.aspose.imaging.Figure();
    figureToFill.setClosed(true);
    
    com.aspose.imaging.GraphicsPath pathToFill = new com.aspose.imaging.GraphicsPath();
    pathToFill.addFigure(figureToFill);
    
    figureToFill.addShapes(new com.aspose.imaging.Shape[]
            {
                    new com.aspose.imaging.shapes.ArcShape(new com.aspose.imaging.RectangleF(400, 0, 200, 100), 45, 300),
                    new com.aspose.imaging.shapes.BezierShape(
                            new com.aspose.imaging.PointF[]
                                    {
                                            new com.aspose.imaging.PointF(300, 200),
                                            new com.aspose.imaging.PointF(400, 200),
                                            new com.aspose.imaging.PointF(500, 100),
                                            new com.aspose.imaging.PointF(600, 200),
                                    }),
                    new com.aspose.imaging.shapes.PolygonShape(
                            new com.aspose.imaging.PointF[]
                                    {
                                            new com.aspose.imaging.PointF(300, 100),
                                    }),
                    new com.aspose.imaging.shapes.RectangleShape(new com.aspose.imaging.RectangleF(0, 100, 200, 200)),
            });
    
    // Fill the path using a yellow brush and a green pen to draw outline
    graphics.fillPath(
            new com.aspose.imaging.Pen(com.aspose.imaging.Color.getGreen(), 2),
            new com.aspose.imaging.brushes.SolidBrush(com.aspose.imaging.Color.getYellow()), pathToFill);
    
    // Create a path to draw
    com.aspose.imaging.GraphicsPath pathToDraw = new com.aspose.imaging.GraphicsPath();
    com.aspose.imaging.Figure figureToDraw = new com.aspose.imaging.Figure();
    pathToDraw.addFigure(figureToDraw);
    
    figureToDraw.addShapes(new com.aspose.imaging.Shape[]
            {
                    new com.aspose.imaging.shapes.ArcShape(new com.aspose.imaging.RectangleF(200, 200, 200, 200), 0, 360),
            });
    
    // Draw the path using a 5-pixel-wide orange pen.
    graphics.drawPath(new com.aspose.imaging.Pen(com.aspose.imaging.Color.getOrange(), 5), pathToDraw);
    
    // In order to rasterize SVG we need to specify rasterization options.
    com.aspose.imaging.imageoptions.SvgRasterizationOptions rasterizationOptions = new com.aspose.imaging.imageoptions.SvgRasterizationOptions();
    com.aspose.imaging.imageoptions.PngOptions saveOptions = new com.aspose.imaging.imageoptions.PngOptions();
    saveOptions.setVectorRasterizationOptions(rasterizationOptions);
    
    // Get the final WMF image which includes all drawing commands
    com.aspose.imaging.fileformats.emf.EmfImage emfImage = graphics.endRecording();
    try {
        emfImage.save(dir + "test.output.emf");
    } finally {
        emfImage.dispose();
    }
    

    • Constructor Detail

      • EmfRecorderGraphics2D

        public EmfRecorderGraphics2D(Rectangle frame,
                                     Size deviceSize,
                                     Size deviceSizeMm)

        Initializes a new instance of the EmfRecorderGraphics2D class.

        Parameters:
        frame - The frame.
        deviceSize - Size of the device.
        deviceSizeMm - The device size mm.
    • Method Detail

      • getBackgroundMode

        public final int getBackgroundMode()

        Gets or sets the background mode.

        Returns:
        The background mode.
      • setBackgroundMode

        public final void setBackgroundMode(int value)

        Gets or sets the background mode.

        Parameters:
        value - The background mode.
      • endRecording

        public final EmfImage endRecording()

        Ends the recording.

        Returns:
        The result image.
      • fromEmfImage

        public static EmfRecorderGraphics2D fromEmfImage(EmfImage emfImage)

        Gets an instance of the EmfRecorderGraphics2D containing all records from the Emf image.

        Parameters:
        emfImage - The Emf image to read records from.
        Returns:
        An instance of the EmfRecorderGraphics2D
        Code example:

        This example shows how to load a EMF image from a file and draw a text string over it.


        String dir = "c:\\temp\\";
        
        com.aspose.imaging.fileformats.emf.EmfImage emfImage = (com.aspose.imaging.fileformats.emf.EmfImage) com.aspose.imaging.Image.load(dir + "test.emf");
        try {
            com.aspose.imaging.fileformats.emf.graphics.EmfRecorderGraphics2D graphics =
                    com.aspose.imaging.fileformats.emf.graphics.EmfRecorderGraphics2D.fromEmfImage(emfImage);
        
            // First, get the image size
            int width = emfImage.getWidth();
            int height = emfImage.getHeight();
        
            // Second, calculate a transformation to put a text string along the main diagonal of the image -
            // from the upper-left to the bootom-right corner.
            float emFontSize = 96f;
            float d = (float) java.lang.Math.sqrt(width * width + height * height);
            float scaleFactor = d / (emFontSize * 5f);
        
            float tan = ((float) height) / width;
            double radians = java.lang.Math.atan(tan);
            double degrees = (180 * radians) / java.lang.Math.PI;
        
            com.aspose.imaging.Matrix transform = new com.aspose.imaging.Matrix();
            transform.rotate((float) degrees);
            transform.scale(scaleFactor, scaleFactor);
        
            // Then, set the transform.
            graphics.setTransform(transform);
        
            // Finally, put a watermark (text string of pink color) along the main diagonal.
            graphics.drawString("WATERMARK", new com.aspose.imaging.Font(
                            "Courier New", emFontSize),
                    com.aspose.imaging.Color.getLightPink(), 0, 0/*, (float)degrees*/);
        
            // Save the image with watermark to another EMF file.
            com.aspose.imaging.fileformats.emf.EmfImage scaledEmfImage = graphics.endRecording();
            try {
                scaledEmfImage.save(dir + "test.scaled.emf");
            } finally {
                scaledEmfImage.dispose();
            }
        } finally {
            emfImage.dispose();
        }