class mrpt::img::CCanvas

This virtual class defines the interface of any object accepting drawing primitives on it.

A number of text fonts can be selected with CCanvas::selectTextFont(). These are the implemented font names:

  • “6x13”

  • “6x13B” (bold)

  • “6x13O” (italic)

  • “9x15”

  • “9x15B” (bold)

  • “10x20”

  • “18x18ja” (Japanese, UNICODE character values)

For an example of each font check the corresponding wiki page.

See also:

CImage

#include <mrpt/img/CCanvas.h>

class CCanvas
{
public:
    // enums

    enum TPenStyle;

    // construction

    CCanvas();

    //
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 = '+'
        );
};

// direct descendants

class CEnhancedMetaFile;
class CImage;

Methods

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

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.

You can also use a TColor() type as input and it will be automatically converted to size_t.

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 = 0

Returns the width of the image in pixels.

virtual size_t getHeight() const = 0

Returns the height of the image in pixels.

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 appropiate manner.

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

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

Draws a triangle.

Parameters:

x0

The triangle center x coordinate

y0

The triangle center y coordinate

size

The size of the triangle

color

The color of the line

inferior

The position of the triangle

width

The desired width of the line.

See also:

triangle

virtual void filledRectangle(int x0, int y0, int x1, int y1, const mrpt::img::TColor color)

Draws a filled rectangle.

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 rectangle fill This method may be redefined in some classes implementing this interface in a more appropiate manner.

See also:

rectangle

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

Renders 2D text using bitmap fonts.

Parameters:

x0

The x coordinates

y0

The y coordinates

str

The string to put. If using UNICODE characters, use UTF-8 encoding.

color

The text color

See also:

selectTextFont

virtual void selectTextFont(const std::string& fontName)

Select the current font used when drawing text.

Valid font names:

  • 5x7

  • 6x13

  • 6x13B

  • 6x13O

  • 9x15 (Default at start-up)

  • 9x15B

  • 10x20

  • 18x18ja (Asian characters for UTF-8 strings - Only available if MRPT is built with MRPT_HAS_ASIAN_FONTS = true)

    _images/sample_textFonts.png

Parameters:

fontName

The name of the font

See also:

textOut, The example in this page.

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 appropiate manner.

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

Draw a mark.

Parameters:

x0

The point x coordinate

y0

The point y coordinate

color

The color of the cross

size

The size of the cross

type

The cross type. It could be: ‘x’, ‘+’, ‘:’(like ‘+’ but clear at the center dot), or ‘s’ (square)

width

The desired width of the cross (this is IGNORED yet)

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 appropiate manner.

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

Draws a circle of a given radius.

Parameters:

x

The center - x coordinate in pixels.

y

The center - y coordinate in pixels.

radius

The radius - in pixels.

color

The color of the circle.

width

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

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
    )

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.

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

Draws a set of marks onto the image, given a generic container of entities having just “x” and “y” fields.

The class of FEATURELIST can be, for example, std::vector<mrpt::math::TPoint2D>, std::vector<TPixelCoordsf> or mrpt::vision::CFeatureList

See also:

drawFeatures

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 = '+'
    )

Draws a set of marks (or scaled circles for features with scale) onto the image, given a generic container of features.

The class of FEATURELIST can be:

See also:

drawFeaturesSimple