png_io.cpp
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Point Cloud Library (PCL) - www.pointclouds.org
00005  *  Copyright (c) 2010-2011, Willow Garage, Inc.
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  * $Id$
00037  *
00038  */
00039 
00040 #include <pcl/io/png_io.h>
00041 #include <vtkImageImport.h>
00042 #include <vtkPNGWriter.h>
00043 #include <vtkSmartPointer.h>
00044 #include <vtkImageFlip.h>
00045 
00046 namespace 
00047 {
00048   void flipAndWritePng(const std::string &file_name, vtkSmartPointer<vtkImageImport>& importer)
00049   {
00050     vtkSmartPointer<vtkImageFlip> flipYFilter = vtkSmartPointer<vtkImageFlip>::New();
00051     flipYFilter->SetFilteredAxis(1); // flip y axis
00052     flipYFilter->SetInputConnection(importer->GetOutputPort());
00053     flipYFilter->Update();
00054 
00055     vtkSmartPointer<vtkPNGWriter> writer = vtkSmartPointer<vtkPNGWriter>::New();
00056     writer->SetFileName(file_name.c_str());
00057     writer->SetInputConnection(flipYFilter->GetOutputPort());
00058     writer->Write();
00059   }
00060 };
00061 
00062 
00063 
00064 
00065 void 
00066 pcl::io::saveCharPNGFile (const std::string &file_name, const unsigned char *char_data, int width, int height, int channels)
00067 {
00068   vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New ();
00069   importer->SetNumberOfScalarComponents (channels);
00070   importer->SetDataScalarTypeToUnsignedChar ();
00071   importer->SetWholeExtent (0, width - 1, 0, height - 1, 0, 0);
00072   importer->SetDataExtentToWholeExtent ();
00073 
00074   void* data = const_cast<void*> (reinterpret_cast<const void*> (char_data));
00075   importer->SetImportVoidPointer (data, 1);
00076   importer->Update ();
00077 
00078   flipAndWritePng(file_name, importer);
00079 }
00080 
00081 void 
00082 pcl::io::saveShortPNGFile (const std::string &file_name, const unsigned short *short_image, int width, int height, int channels)
00083 {
00084   vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New ();
00085   importer->SetNumberOfScalarComponents (channels);
00086   importer->SetDataScalarTypeToUnsignedShort ();
00087   importer->SetWholeExtent (0, width - 1, 0, height - 1, 0, 0);
00088   importer->SetDataExtentToWholeExtent ();
00089 
00090   void* data = const_cast<void*> (reinterpret_cast<const void*> (short_image));
00091   importer->SetImportVoidPointer (data, 1);
00092   importer->Update ();
00093 
00094   flipAndWritePng(file_name, importer);
00095 }


pcl
Author(s): Open Perception
autogenerated on Wed Aug 26 2015 15:28:18