Image.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 /* Desc: Image class
18  * Author: Nate Koenig
19  * Date: 14 July 2008
20  */
21 
22 #ifndef _IMAGE_HH_
23 #define _IMAGE_HH_
24 
25 #ifdef _WIN32
26  // Ensure that Winsock2.h is included before Windows.h, which can get
27  // pulled in by anybody (e.g., Boost).
28  #include <Winsock2.h>
29 #endif
30 
31 #ifdef BOOL
32 #undef BOOL
33 #endif
34 #include <FreeImage.h>
35 #include <string>
36 #include <ignition/math/Color.hh>
37 
38 #include "gazebo/util/system.hh"
39 
40 namespace gazebo
41 {
42  namespace common
43  {
46 
49  static std::string PixelFormatNames[] =
50  {
51  "UNKNOWN_PIXEL_FORMAT",
52  "L_INT8",
53  "L_INT16",
54  "RGB_INT8",
55  "RGBA_INT8",
56  "BGRA_INT8",
57  "RGB_INT16",
58  "RGB_INT32",
59  "BGR_INT8",
60  "BGR_INT16",
61  "BGR_INT32",
62  "R_FLOAT16",
63  "RGB_FLOAT16",
64  "R_FLOAT32",
65  "RGB_FLOAT32",
66  "BAYER_RGGB8",
67  "BAYER_RGGR8",
68  "BAYER_GBRG8",
69  "BAYER_GRBG8"
70  };
71 
74  class GZ_COMMON_VISIBLE Image
75  {
77  public: enum PixelFormat
78  {
79  UNKNOWN_PIXEL_FORMAT = 0,
98  PIXEL_FORMAT_COUNT
99  };
100 
101 
105  public: static Image::PixelFormat ConvertPixelFormat(
106  const std::string &_format);
107 
110  public: explicit Image(const std::string &_filename="");
111 
113  public: virtual ~Image();
114 
118  public: int Load(const std::string &_filename);
119 
122  public: void SavePNG(const std::string &_filename);
123 
129  public: void SetFromData(const unsigned char *_data,
130  unsigned int _width,
131  unsigned int _height,
132  Image::PixelFormat _format);
133 
137  public: void GetData(unsigned char **_data,
138  unsigned int &_count) const;
139 
144  public: void GetRGBData(unsigned char **_data,
145  unsigned int &_count) const;
146 
149  public: unsigned int GetWidth() const;
150 
153  public: unsigned int GetHeight() const;
154 
157  public: unsigned int GetBPP() const;
158 
159  // \brief Get the size of a row of pixel
161  public: int GetPitch() const;
162 
165  public: std::string GetFilename() const;
166 
169  public: PixelFormat GetPixelFormat() const;
170 
175  public: ignition::math::Color Pixel(const unsigned int _x,
176  const unsigned int _y) const;
177 
180  public: ignition::math::Color AvgColor();
181 
184  public: ignition::math::Color MaxColor() const;
185 
189  public: void Rescale(int _width, int _height);
190 
193  public: bool Valid() const;
194 
196  private: void GetDataImpl(unsigned char **_data, unsigned int &_count,
197  FIBITMAP *_img) const;
198 
201  private: static int count;
202 
204  private: FIBITMAP *bitmap;
205 
207  private: std::string fullName;
208  };
210  }
211 }
212 #endif
Definition: Image.hh:80
Definition: Image.hh:95
Forward declarations for the common classes.
Definition: Animation.hh:26
Definition: Image.hh:94
Definition: Image.hh:87
Definition: Image.hh:97
Definition: Image.hh:81
Definition: Image.hh:89
PixelFormat
Pixel formats enumeration.
Definition: Image.hh:77
Definition: Image.hh:93
Definition: Image.hh:82
Definition: Image.hh:83
Definition: Image.hh:88
Definition: Image.hh:86
Definition: Image.hh:90
Definition: Image.hh:92
static std::string PixelFormatNames[]
String names for the pixel formats.
Definition: Image.hh:49
Definition: Image.hh:91
Definition: Image.hh:85
Encapsulates an image.
Definition: Image.hh:74
Definition: Image.hh:96
Definition: Image.hh:84