/* * RImageFromPPM.cpp * FaceCrop * * Created by Andrew Salamon on 10/12/06. * Copyright 2006 Machine Perception Laboratory, University of California San Diego.. All rights reserved. * */ #include "RImageFromPPM.h" extern "C" { #include } inline float grayFromRGB( unsigned long r, unsigned long g, unsigned long b ) { int theGrayValue = ((306 * (r & 0xff)) + (601 * (g & 0xff)) + (117 * (b & 0xff))) >> 10; return ((float)theGrayValue) / 255.0; } bool restoreRimageFromPPM( RImage &rimage, const std::string &path ) { struct pam inpam; unsigned int row; // pnm_init(&argc, argv); FILE *imagePtr = pm_openr( path.c_str() ); if( !imagePtr ) return false; pnm_readpaminit( imagePtr, &inpam, PAM_STRUCT_SIZE(tuple_type)); pm_close( imagePtr ); if( inpam.depth < 3 ) return false; rimage.setSize( inpam.width, inpam.height ); tuple *tuplerow = pnm_allocpamrow(&inpam); unsigned int ridx = 0; for (row = 0; row < inpam.height; row++) { unsigned int column; pnm_readpamrow( &inpam, tuplerow ); for (column = 0; column < inpam.width; ++column) { rimage.array[ ridx++ ] = grayFromRGB( tuplerow[column][PAM_RED_PLANE], tuplerow[column][PAM_GRN_PLANE], tuplerow[column][PAM_BLU_PLANE] ); } } pnm_freepamrow(tuplerow); return true; }