2 ///////////////////////////////////////////////////////////////////////////
3 // This program is free software: you can redistribute it and/or modify //
4 // it under the terms of the version 3 of the GNU General Public License //
5 // as published by the Free Software Foundation. //
7 // This program is distributed in the hope that it will be useful, but //
8 // WITHOUT ANY WARRANTY; without even the implied warranty of //
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
10 // General Public License for more details. //
12 // You should have received a copy of the GNU General Public License //
13 // along with this program. If not, see <http://www.gnu.org/licenses/>. //
15 // Written by Francois Fleuret //
16 // (C) Idiap Research Institute //
18 // Contact <francois.fleuret@idiap.ch> for comments & bug reports //
19 ///////////////////////////////////////////////////////////////////////////
23 A simple image class to either load color images, or produce
36 unsigned char ***_bit_plans, **_bit_lines, *_bit_map;
37 static const int RED = 0;
38 static const int GREEN = 1;
39 static const int BLUE = 2;
40 static const int RGB_DEPTH = 3;
48 RGBImage(int width, int height);
49 RGBImage(RGBImage *image, scalar_t scale);
52 inline int width() const { return _width; }
53 inline int height() const { return _height; }
55 inline void set_pixel(int x, int y, unsigned char r, unsigned char g, unsigned char b) {
56 ASSERT(x >= 0 && x < _width && y >= 0 && y < _height);
57 _bit_plans[RED][y][x] = r;
58 _bit_plans[GREEN][y][x] = g;
59 _bit_plans[BLUE][y][x] = b;
62 inline unsigned char pixel(int x, int y, int d) {
63 ASSERT(x >= 0 && x < _width && y >= 0 && y < _height && d >= 0 && d < RGB_DEPTH);
64 return _bit_plans[d][y][x];
67 virtual void read_png(const char *filename);
68 virtual void write_png(const char *filename);
70 virtual void read_jpg(const char *filename);
71 virtual void write_jpg(const char *filename, int quality);
73 virtual void draw_line(int thickness,
74 unsigned char r, unsigned char g, unsigned char b,
75 scalar_t x0, scalar_t y0, scalar_t x1, scalar_t y1);
77 virtual void draw_ellipse(int thickness,
78 unsigned char r, unsigned char g, unsigned char b,
79 scalar_t xc, scalar_t yc, scalar_t radius_1, scalar_t radius_2, scalar_t tilt);