openni_ir_image.cpp
Go to the documentation of this file.
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2011 Willow Garage, Inc.
5  * Suat Gedikli <gedikli@willowgarage.com>
6  *
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * * Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  * * Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  * * Neither the name of Willow Garage, Inc. nor the names of its
20  * contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
37 
39 #include <sstream>
40 #include <limits>
41 #include <iostream>
42 
43 using namespace std;
44 
45 namespace openni_wrapper
46 {
47 void IRImage::fillRaw (unsigned width, unsigned height, unsigned short* ir_buffer, unsigned line_step) const throw (OpenNIException)
48 {
49  if (width > ir_md_->XRes () || height > ir_md_->YRes ())
50  THROW_OPENNI_EXCEPTION ("upsampling not supported: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
51 
52  if (ir_md_->XRes () % width != 0 || ir_md_->YRes () % height != 0)
53  THROW_OPENNI_EXCEPTION ("downsampling only supported for integer scale: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
54 
55  if (line_step == 0)
56  line_step = width * sizeof (unsigned short);
57 
58  // special case no scaling, no padding => memcopy!
59  if (width == ir_md_->XRes () && height == ir_md_->YRes () && (line_step == width * sizeof (unsigned short)))
60  {
61  memcpy (ir_buffer, ir_md_->WritableData(), ir_md_->DataSize ());
62  return;
63  }
64 
65  // padding skip for destination image
66  unsigned bufferSkip = line_step - width * sizeof (unsigned short);
67 
68  // step and padding skip for source image
69  unsigned xStep = ir_md_->XRes () / width;
70  unsigned ySkip = (ir_md_->YRes () / height - 1) * ir_md_->XRes ();
71 
72  unsigned irIdx = 0;
73 
74  for (unsigned yIdx = 0; yIdx < height; ++yIdx, irIdx += ySkip)
75  {
76  for (unsigned xIdx = 0; xIdx < width; ++xIdx, irIdx += xStep, ++ir_buffer)
77  *ir_buffer = (unsigned short) (ir_md_->WritableData()[irIdx]);
78 
79  // if we have padding
80  if (bufferSkip > 0)
81  {
82  char* cBuffer = reinterpret_cast<char*> (ir_buffer);
83  ir_buffer = reinterpret_cast<unsigned short*> (cBuffer + bufferSkip);
84  }
85  }
86 }
87 } // namespace openni_wrapper
#define THROW_OPENNI_EXCEPTION(format,...)
General exception class.


openni_camera
Author(s): Patrick Mihelich, Suat Gedikli, Radu Bogdan Rusu
autogenerated on Wed Jun 5 2019 20:15:22