// // NSImageFromPPM.m // FaceCrop // // Created by Andrew Salamon on 10/10/06. // Copyright 2006 Machine Perception Laboratory, University of California San Diego.. All rights reserved. // #import "NSImageFromPPM.h" @implementation NSImage(NSImageFromPPM) - (id)initWithContentsOfPPMFile:(NSString *)fileName { NSTask *convert = [[NSTask alloc] init]; NSString *ppmtobmp = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"ppmtobmp"]; NSPipe *pipe = [NSPipe pipe]; NSFileHandle *output = [pipe fileHandleForReading]; [convert setLaunchPath:ppmtobmp]; [convert setArguments:[NSArray arrayWithObject:fileName]]; [convert setStandardOutput:pipe]; [convert launch]; // [convert waitUntilExit]; NSMutableData *ppmData = [NSMutableData data]; NSData *data = [output availableData]; while( ( data != nil ) && ( [ data length] != 0 ) ) { [ppmData appendData:data]; data = [output availableData]; } if( [ppmData length] > 0 ) { self = [self initWithData:ppmData]; } else { [self release]; self = nil; } [convert release]; return self; } //{ // /* Example program fragment to read a PAM or PNM image // from stdin, add up the values of every sample in it // (I don't know why), and write the image unchanged to // stdout. */ // //#include // // struct pam inpam; // unsigned int row; // //// pnm_init(&argc, argv); // // FILE *imagePtr = pm_openr( char * name); // // pnm_readpaminit( imagePtr, &inpam, PAM_STRUCT_SIZE(tuple_type)); // // tuplerow = pnm_allocpamrow(&inpam); // // for (row = 0; row < inpam.height; row++) // { // unsigned int column; // pnm_readpamrow( &inpam, tuplerow ); // for (column = 0; column < inpam.width; ++column) // { // unsigned int plane; // for (plane = 0; plane < inpam.depth; ++plane) // { // grand_total += tuplerow[column][plane]; // } // } // } // // pnm_freepamrow(tuplerow); // pm_close( imagePtr ); //} @end