#include #include #include #include "BMP.h" using namespace std; void usage(const char * progName); void squashAndPadData(unsigned char * raw_data, unsigned char * padded_data, int width, int height); void usage(const char * progName) { cout << "Usage: " << progName << " [options] " << endl; cout << " Options:" << endl; cout << " -l threshold_level : set threshold level" << endl; exit(42); } int main(int argc, char * argv[]) { int argi; string inputFileName; string outputFileName; unsigned int threshold_level = 60; for (argi = 0; argi < argc; argi++) { if (!strcmp(argv[argi], "-l")) { if (argi >= argc - 1) usage(argv[0]); argi++; threshold_level = atoi(argv[argi]); } else { inputFileName = argv[argi]; outputFileName = string(argv[argi], strlen(argv[argi]) - 4); outputFileName += "-edges.bmp"; } } if (inputFileName == "") usage(argv[0]); BMP inputImage(inputFileName.c_str()); int width = inputImage.getWidth(); int height = inputImage.getHeight(); int num_pixels = width * height; unsigned char * bmp_data = new unsigned char[num_pixels * 3]; inputImage.read(bmp_data); unsigned char * padded_data = new unsigned char[(width + 2) * (height + 2)]; squashAndPadData(bmp_data, padded_data, width, height); delete[] bmp_data; delete[] padded_data; } void squashAndPadData(unsigned char * raw_data, unsigned char * padded_data, int width, int height) { for (int i = 0; i < width + 2; i++) *padded_data++ = 0; for (int i = 0; i < height; i++) { *padded_data++ = 0; for (int j = 0; j < width; j++) { *padded_data++ = (raw_data[0] + raw_data[1] + raw_data[2]) / 3; raw_data += 3; } *padded_data++ = 0; } for (int i = 0; i < width + 2; i++) *padded_data++ = 0; }