Point Cloud Library (PCL) 1.13.0
openni_image.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011 Willow Garage, Inc.
5 *
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of the copyright holder(s) nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 *
35 */
36
37#pragma once
38
39#include <pcl/pcl_config.h>
40#include <pcl/memory.h>
41#ifdef HAVE_OPENNI
42
43#include <pcl/pcl_exports.h>
44#include "openni.h"
45#include "openni_exception.h"
46
47namespace openni_wrapper
48{
49
50 /**
51 * @brief Image class containing just a reference to image meta data. Thus this class
52 * just provides an interface to fill a RGB or Grayscale image buffer.
53 * @author Suat Gedikli
54 * @date 02.january 2011
55 * @param[in] image_meta_data
56 * @ingroup io
57 */
59 {
60 public:
61 using Ptr = pcl::shared_ptr<Image>;
62 using ConstPtr = pcl::shared_ptr<const Image>;
63
65 {
68 RGB
69 };
70
71 /**
72 * @author Suat Gedikli
73 * @brief Constructor
74 * @param[in] image_meta_data the actual image data from the OpenNI driver
75 */
76 inline Image (pcl::shared_ptr<xn::ImageMetaData> image_meta_data) noexcept;
77
78 /**
79 * @author Suat Gedikli
80 * @brief virtual Destructor that never throws an exception.
81 */
82 inline virtual ~Image () noexcept;
83
84 /**
85 * @author Suat Gedikli
86 * @param[in] input_width width of input image
87 * @param[in] input_height height of input image
88 * @param[in] output_width width of desired output image
89 * @param[in] output_height height of desired output image
90 * @return whether the resizing is supported or not.
91 */
92 virtual bool isResizingSupported (unsigned input_width, unsigned input_height,
93 unsigned output_width, unsigned output_height) const = 0;
94
95 /**
96 * @author Suat Gedikli
97 * @brief fills a user given buffer with the RGB values, with an optional nearest-neighbor down sampling and an optional subregion
98 * @param[in] width desired width of output image.
99 * @param[in] height desired height of output image.
100 * @param[in,out] rgb_buffer the output RGB buffer.
101 * @param[in] rgb_line_step optional line step in bytes to allow the output in a rectangular subregion of the output buffer.
102 */
103 virtual void fillRGB (unsigned width, unsigned height, unsigned char* rgb_buffer,
104 unsigned rgb_line_step = 0) const = 0;
105
106 /**
107 * @author Suat Gedikli
108 * @brief returns the encoding of the native data.
109 * @return encoding
110 */
111 virtual Encoding getEncoding () const = 0;
112
113 /**
114 * @author Suat Gedikli
115 * @brief fills a user given buffer with the raw values.
116 * @param[in,out] rgb_buffer
117 */
118 inline void
119 fillRaw (unsigned char* rgb_buffer) const throw ()
120 {
121 memcpy (rgb_buffer, image_md_->Data (), image_md_->DataSize ());
122 }
123
124 /**
125 * @author Suat Gedikli
126 * @brief fills a user given buffer with the gray values, with an optional nearest-neighbor down sampling and an optional subregion
127 * @param[in] width desired width of output image.
128 * @param[in] height desired height of output image.
129 * @param[in,out] gray_buffer the output gray buffer.
130 * @param[in] gray_line_step optional line step in bytes to allow the output in a rectangular subregion of the output buffer.
131 */
132 virtual void fillGrayscale (unsigned width, unsigned height, unsigned char* gray_buffer,
133 unsigned gray_line_step = 0) const = 0;
134
135 /**
136 * @author Suat Gedikli
137 * @return width of the image
138 */
139 inline unsigned getWidth () const throw ();
140
141 /**
142 * @author Suat Gedikli
143 * @return height of the image
144 */
145 inline unsigned getHeight () const throw ();
146
147 /**
148 * @author Suat Gedikli
149 * @return frame id of the image.
150 * @note frame ids are ascending, but not necessarily synch'ed with other streams
151 */
152 inline unsigned getFrameID () const throw ();
153
154 /**
155 * @author Suat Gedikli
156 * @return the time stamp of the image
157 * @note the time value is not synche'ed with the system time
158 */
159 inline unsigned long getTimeStamp () const throw ();
160
161 /**
162 * @author Suat Gedikli
163 * @return the actual data in native OpenNI format.
164 */
165 inline const xn::ImageMetaData& getMetaData () const throw ();
166
167 protected:
168 pcl::shared_ptr<xn::ImageMetaData> image_md_;
169 } ;
170
171 Image::Image (pcl::shared_ptr<xn::ImageMetaData> image_meta_data) noexcept
172 : image_md_ (std::move(image_meta_data))
173 {
174 }
175
176 Image::~Image () noexcept = default;
177
178 unsigned
179 Image::getWidth () const throw ()
180 {
181 return image_md_->XRes ();
182 }
183
184 unsigned
185 Image::getHeight () const throw ()
186 {
187 return image_md_->YRes ();
188 }
189
190 unsigned
191 Image::getFrameID () const throw ()
192 {
193 return image_md_->FrameID ();
194 }
195
196 unsigned long
197 Image::getTimeStamp () const throw ()
198 {
199 return static_cast<unsigned long> (image_md_->Timestamp ());
200 }
201
202 const xn::ImageMetaData&
203 Image::getMetaData () const throw ()
204 {
205 return *image_md_;
206 }
207} // namespace
208#endif
Image class containing just a reference to image meta data.
Definition: openni_image.h:59
pcl::shared_ptr< Image > Ptr
Definition: openni_image.h:61
unsigned getHeight() const
Definition: openni_image.h:185
pcl::shared_ptr< const Image > ConstPtr
Definition: openni_image.h:62
virtual ~Image() noexcept
virtual Destructor that never throws an exception.
const xn::ImageMetaData & getMetaData() const
Definition: openni_image.h:203
unsigned getFrameID() const
Definition: openni_image.h:191
unsigned long getTimeStamp() const
Definition: openni_image.h:197
virtual void fillGrayscale(unsigned width, unsigned height, unsigned char *gray_buffer, unsigned gray_line_step=0) const =0
fills a user given buffer with the gray values, with an optional nearest-neighbor down sampling and a...
Defines functions, macros and traits for allocating and using memory.
#define PCL_EXPORTS
Definition: pcl_macros.h:323