automatic commit
[folded-ctf.git] / rgb_image.h
1 /*
2  *  folded-ctf is an implementation of the folded hierarchy of
3  *  classifiers for object detection, developed by Francois Fleuret
4  *  and Donald Geman.
5  *
6  *  Copyright (c) 2008 Idiap Research Institute, http://www.idiap.ch/
7  *  Written by Francois Fleuret <francois.fleuret@idiap.ch>
8  *
9  *  This file is part of folded-ctf.
10  *
11  *  folded-ctf is free software: you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published
13  *  by the Free Software Foundation, either version 3 of the License,
14  *  or (at your option) any later version.
15  *
16  *  folded-ctf is distributed in the hope that it will be useful, but
17  *  WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  *  General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with folded-ctf.  If not, see <http://www.gnu.org/licenses/>.
23  *
24  */
25
26 /*
27
28   A simple image class to either load color images, or produce
29   materials.
30
31  */
32
33 #ifndef RGB_IMAGE_H
34 #define RGB_IMAGE_H
35
36 #include "misc.h"
37
38 class RGBImage {
39 protected:
40   int _width, _height;
41   unsigned char ***_bit_plans, **_bit_lines, *_bit_map;
42   static const int RED = 0;
43   static const int GREEN = 1;
44   static const int BLUE = 2;
45   static const int RGB_DEPTH = 3;
46
47   void allocate();
48   void deallocate();
49
50 public:
51
52   RGBImage();
53   RGBImage(int width, int height);
54   RGBImage(RGBImage *image, scalar_t scale);
55   virtual ~RGBImage();
56
57   inline int width() const { return _width; }
58   inline int height() const { return _height; }
59
60   inline void set_pixel(int x, int y, unsigned char r, unsigned char g, unsigned char b) {
61     ASSERT(x >= 0 && x < _width && y >= 0 && y < _height);
62     _bit_plans[RED][y][x] = r;
63     _bit_plans[GREEN][y][x] = g;
64     _bit_plans[BLUE][y][x] = b;
65   }
66
67   inline unsigned char pixel(int x, int y, int d) {
68     ASSERT(x >= 0 && x < _width && y >= 0 && y < _height && d >= 0 && d < RGB_DEPTH);
69     return _bit_plans[d][y][x];
70   }
71
72   virtual void read_png(const char *filename);
73   virtual void write_png(const char *filename);
74
75   virtual void read_jpg(const char *filename);
76   virtual void write_jpg(const char *filename, int quality);
77
78   virtual void draw_line(int thickness,
79                          unsigned char r, unsigned char g, unsigned char b,
80                          scalar_t x0, scalar_t y0, scalar_t x1, scalar_t y1);
81
82   virtual void draw_ellipse(int thickness,
83                             unsigned char r, unsigned char g, unsigned char b,
84                             scalar_t xc, scalar_t yc, scalar_t radius_1, scalar_t radius_2, scalar_t tilt);
85 };
86
87 #endif