class mrpt::img::CEnhancedMetaFile

Overview

This class represents a Windows Enhanced Meta File (EMF) for generating and saving graphics.

If used under Linux, a “.png”, non-vectorial, file will be generated instead.

#include <mrpt/img/CEnhancedMetaFile.h>

class CEnhancedMetaFile: public mrpt::img::CCanvas
{
public:
    // construction

    CEnhancedMetaFile(const std::string& targetFileName, int scaleFactor = 1);

    // methods

    static void LINUX_IMG_WIDTH(int value);
    static int LINUX_IMG_WIDTH();
    static void LINUX_IMG_HEIGHT(int value);
    static int LINUX_IMG_HEIGHT();
    virtual void setPixel(int x, int y, size_t color);
    virtual size_t getWidth() const;
    virtual size_t getHeight() const;
    virtual void drawImage(int x, int y, const mrpt::img::CImage& img);

    virtual void line(
        int x0,
        int y0,
        int x1,
        int y1,
        const mrpt::img::TColor color,
        unsigned int width = 1,
        TPenStyle penStyle = psSolid
        );

    virtual void textOut(int x0, int y0, const std::string& str, const mrpt::img::TColor color);

    virtual void selectVectorTextFont(
        const std::string& fontName,
        int fontSize,
        bool bold = false,
        bool italic = false
        );

    virtual void drawImage(int x, int y, const mrpt::img::CImage& img, float rotation, float scale);

    virtual void rectangle(
        int x0,
        int y0,
        int x1,
        int y1,
        const mrpt::img::TColor color,
        unsigned int width = 1
        );

    template <class T>
    void ellipseGaussian(
        mrpt::math::CMatrixDynamic<T>* cov2D,
        T mean_x,
        T mean_y,
        float confIntervalStds = 2,
        const mrpt::img::TColor& color = mrpt::img::TColor(255, 255, 255),
        unsigned int width = 1,
        int nEllipsePoints = 20
        );
};

Inherited Members

public:
    // enums

    enum TPenStyle;

    // methods

    virtual void setPixel(int x, int y, size_t color) = 0;
    virtual size_t getWidth() const = 0;
    virtual size_t getHeight() const = 0;

    virtual void line(
        int x0,
        int y0,
        int x1,
        int y1,
        const mrpt::img::TColor color,
        unsigned int width = 1,
        TPenStyle penStyle = psSolid
        );

    void rectangle(int x0, int y0, int x1, int y1, const mrpt::img::TColor color, unsigned int width = 1);

    void triangle(
        int x0,
        int y0,
        int size,
        const mrpt::img::TColor color,
        bool inferior = true,
        unsigned int width = 1
        );

    virtual void filledRectangle(int x0, int y0, int x1, int y1, const mrpt::img::TColor color);
    virtual void textOut(int x0, int y0, const std::string& str, const mrpt::img::TColor color);
    virtual void selectTextFont(const std::string& fontName);
    virtual void drawImage(int x, int y, const mrpt::img::CImage& img);

    void drawMark(
        int x0,
        int y0,
        const mrpt::img::TColor color,
        char type,
        int size = 5,
        unsigned int width = 1
        );

    virtual void drawImage(int x, int y, const mrpt::img::CImage& img, float rotation, float scale);

    virtual void drawCircle(
        int x,
        int y,
        int radius,
        const mrpt::img::TColor& color = mrpt::img::TColor(255, 255, 255),
        unsigned int width = 1
        );

    void ellipseGaussian(
        const mrpt::math::CMatrixFixed<double, 2, 2>& cov2D,
        const double mean_x,
        const double mean_y,
        double confIntervalStds = 2,
        const mrpt::img::TColor& color = mrpt::img::TColor(255, 255, 255),
        unsigned int width = 1,
        int nEllipsePoints = 20
        );

    template <class FEATURELIST>
    void drawFeaturesSimple(
        const FEATURELIST& list,
        const TColor& color = TColor::red(),
        const int cross_size = 5
        );

    template <class FEATURELIST>
    void drawFeatures(
        const FEATURELIST& list,
        const TColor& color = TColor::red(),
        const bool showIDs = false,
        const bool showResponse = false,
        const bool showScale = false,
        const char marker = '+'
        );

Construction

CEnhancedMetaFile(const std::string& targetFileName, int scaleFactor = 1)

Constructor.

Parameters:

targetFileName

This file will be created and the EMF saved there.

scaleFactor

All coordinates in draw commands will be internally multiplied by this scale, to provide a way of obtaining “subpixel” drawing.

Methods

static void LINUX_IMG_WIDTH(int value)

In Linux, the size of the bitmap image that emulates the EMF (Default:800)

static void LINUX_IMG_HEIGHT(int value)

In Linux, the size of the bitmap image that emulates the EMF (Default:600)

virtual void setPixel(int x, int y, size_t color)

Changes the value of the pixel (x,y).

Pixel coordinates starts at the left-top corner of the image, and start in (0,0). The meaning of the parameter “color” depends on the implementation: it will usually be a 24bit RGB value (0x00RRGGBB), but it can also be just a 8bit gray level. This method must support (x,y) values OUT of the actual image size without neither raising exceptions, nor leading to memory access errors.

virtual size_t getWidth() const

Returns the width of the image in pixels (this currently has no applicability for a EMF file…)

virtual size_t getHeight() const

Returns the height of the image in pixels (this currently has no applicability for a EMF file…)

virtual void drawImage(int x, int y, const mrpt::img::CImage& img)

Draws an image as a bitmap at a given position.

Parameters:

x0

The top-left corner x coordinates on this canvas where the image is to be drawn

y0

The top-left corner y coordinates on this canvas where the image is to be drawn

img

The image to be drawn in this canvas This method may be redefined in some classes implementing this interface in a more appropriate manner.

virtual void line(
    int x0,
    int y0,
    int x1,
    int y1,
    const mrpt::img::TColor color,
    unsigned int width = 1,
    TPenStyle penStyle = psSolid
    )

Draws a line.

Parameters:

x0

The starting point x coordinate

y0

The starting point y coordinate

x1

The end point x coordinate

y1

The end point y coordinate

color

The color of the line

width

The desired width of the line (this is IGNORED in this virtual class) This method may be redefined in some classes implementing this interface in a more appropriate manner.

virtual void textOut(int x0, int y0, const std::string& str, const mrpt::img::TColor color)

Places a text label.

Parameters:

x0

The x coordinates

y0

The y coordinates

str

The string to put

color

The text color

fontSize

The font size, in “points” This method may be redefined in some classes implementing this interface in a more appropriate manner.

See also:

rectangle

virtual void selectVectorTextFont(
    const std::string& fontName,
    int fontSize,
    bool bold = false,
    bool italic = false
    )

Select the current font used when drawing text.

Parameters:

fontName

The face name of a font (e.g. “Arial”,”System”,…)

fontSize

The size of the font in pts.

bold

Whether the font is bold

italic

Whether the font is italic

See also:

textOut, CCanvas::selectTextFont

virtual void drawImage(int x, int y, const mrpt::img::CImage& img, float rotation, float scale)

Draws an image as a bitmap at a given position, with some custom scale and rotation changes.

Parameters:

x0

The top-left corner x coordinates on this canvas where the image is to be drawn

y0

The top-left corner y coordinates on this canvas where the image is to be drawn

rotation

The rotation in radians, positive values being anti-clockwise direction, 0 is the normal position.

scale

The scale factor, e.g. 2 means twice the original size.

img

The image to be drawn in this canvas This method may be redefined in some classes implementing this interface in a more appropriate manner.

virtual void rectangle(
    int x0,
    int y0,
    int x1,
    int y1,
    const mrpt::img::TColor color,
    unsigned int width = 1
    )

Draws a rectangle (an empty rectangle, without filling)

Parameters:

x0

The top-left x coordinate

y0

The top-left y coordinate

x1

The right-bottom x coordinate

y1

The right-bottom y coordinate

color

The color of the line

width

The desired width of the line.

See also:

filledRectangle

template <class T>
void ellipseGaussian(
    mrpt::math::CMatrixDynamic<T>* cov2D,
    T mean_x,
    T mean_y,
    float confIntervalStds = 2,
    const mrpt::img::TColor& color = mrpt::img::TColor(255, 255, 255),
    unsigned int width = 1,
    int nEllipsePoints = 20
    )

Draws an ellipse representing a given confidence interval of a 2D Gaussian distribution.

Parameters:

mean_x

The x coordinate of the center point of the ellipse.

mean_y

The y coordinate of the center point of the ellipse.

cov2D

A 2x2 covariance matrix.

confIntervalStds

How many “sigmas” for the confidence level (i.e. 2->95%, 3=99.97%,…)

color

The color of the ellipse

width

The desired width of the line (this is IGNORED in this virtual class)

nEllipsePoints

The number of points to generate to approximate the ellipse shape.

std::exception

On an invalid matrix.