openni_ir_image.cpp
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Copyright (c) 2011 Willow Garage, Inc.
00005  *    Suat Gedikli <gedikli@willowgarage.com>
00006  *
00007  *  All rights reserved.
00008  *
00009  *  Redistribution and use in source and binary forms, with or without
00010  *  modification, are permitted provided that the following conditions
00011  *  are met:
00012  *
00013  *   * Redistributions of source code must retain the above copyright
00014  *     notice, this list of conditions and the following disclaimer.
00015  *   * Redistributions in binary form must reproduce the above
00016  *     copyright notice, this list of conditions and the following
00017  *     disclaimer in the documentation and/or other materials provided
00018  *     with the distribution.
00019  *   * Neither the name of Willow Garage, Inc. nor the names of its
00020  *     contributors may be used to endorse or promote products derived
00021  *     from this software without specific prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  */
00037 
00038 #include <openni_camera/openni_ir_image.h>
00039 #include <sstream>
00040 #include <limits>
00041 #include <iostream>
00042 
00043 using namespace std;
00044 
00045 namespace openni_wrapper
00046 {
00047 void IRImage::fillRaw (unsigned width, unsigned height, unsigned short* ir_buffer, unsigned line_step) const throw (OpenNIException)
00048 {
00049   if (width > ir_md_->XRes () || height > ir_md_->YRes ())
00050     THROW_OPENNI_EXCEPTION ("upsampling not supported: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
00051 
00052   if (ir_md_->XRes () % width != 0 || ir_md_->YRes () % height != 0)
00053     THROW_OPENNI_EXCEPTION ("downsampling only supported for integer scale: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
00054 
00055   if (line_step == 0)
00056     line_step = width * sizeof (unsigned short);
00057 
00058   // special case no scaling, no padding => memcopy!
00059   if (width == ir_md_->XRes () && height == ir_md_->YRes () && (line_step == width * sizeof (unsigned short)))
00060   {
00061     memcpy (ir_buffer, ir_md_->WritableData(), ir_md_->DataSize ());
00062     return;
00063   }
00064   
00065   // padding skip for destination image
00066   unsigned bufferSkip = line_step - width * sizeof (unsigned short);
00067 
00068   // step and padding skip for source image
00069   unsigned xStep = ir_md_->XRes () / width;
00070   unsigned ySkip = (ir_md_->YRes () / height - 1) * ir_md_->XRes ();
00071 
00072   unsigned irIdx = 0;
00073 
00074   for (unsigned yIdx = 0; yIdx < height; ++yIdx, irIdx += ySkip)
00075   {
00076     for (unsigned xIdx = 0; xIdx < width; ++xIdx, irIdx += xStep, ++ir_buffer)
00077       *ir_buffer = (unsigned short) (ir_md_->WritableData()[irIdx]);
00078     
00079     // if we have padding
00080     if (bufferSkip > 0)
00081     {
00082       char* cBuffer = reinterpret_cast<char*> (ir_buffer);
00083       ir_buffer = reinterpret_cast<unsigned short*> (cBuffer + bufferSkip);
00084     }
00085   }
00086 }
00087 } // namespace openni_wrapper


openni_camera
Author(s): Patrick Mihelich, Suat Gedikli, Radu Bogdan Rusu
autogenerated on Wed Aug 26 2015 15:08:49