int main(int argc, const char ** argv) { struct cmdlineInfo cmdline; FILE * ifP; xel ** xels; xel * xelrow; xelval maxval; int rows, cols; int format; unsigned int row; pm_proginit(&argc, argv); parseCommandLine(argc, argv, &cmdline); ifP = pm_openr(cmdline.inputFileName); xels = pnm_readpnm(ifP, &cols, &rows, &maxval, &format); pm_close(ifP); xelrow = pnm_allocrow(cmdline.width); pnm_writepnminit(stdout, cmdline.width, cmdline.height, maxval, format, 0); for (row = 0; row < cmdline.height; ++row) { unsigned int col; for (col = 0; col < cmdline.width; ++col) xelrow[col] = xels[row % rows][col % cols]; pnm_writepnmrow(stdout, xelrow, cmdline.width, maxval, format, 0); } pm_close(stdout); return 0; }
int main(int argc, char * argv[]) { struct cmdlineInfo cmdline; FILE * ifP; xelval lmin, lmax; gray * lumamap; /* Luminosity map */ unsigned int * lumahist; /* Histogram of luminosity values */ int rows, cols; /* Rows, columns of input image */ xelval maxval; /* Maxval of input image */ int format; /* Format indicator (PBM/PGM/PPM) */ xel ** xels; /* Pixel array */ unsigned int pixelCount; pnm_init(&argc, argv); parseCommandLine(argc, argv, &cmdline); ifP = pm_openr(cmdline.inputFileName); xels = pnm_readpnm(ifP, &cols, &rows, &maxval, &format); pm_close(ifP); computeLuminosityHistogram(xels, rows, cols, maxval, format, cmdline.gray, &lumahist, &lmin, &lmax, &pixelCount); getMapping(cmdline.rmap, lumahist, maxval, pixelCount, &lumamap); if (cmdline.verbose) reportMap(lumahist, maxval, lumamap); remap(xels, cols, rows, maxval, format, !!cmdline.gray, lumamap); pnm_writepnm(stdout, xels, cols, rows, maxval, format, 0); if (cmdline.wmap) writeMap(cmdline.wmap, lumamap, maxval); pgm_freerow(lumamap); return 0; }
static void convert_image(const char *filename, const char *name) { FILE *fp; xel **pnm; xelval maxval; int cols, rows, fmt, clut_len = 0, size; const char *type; // Load the image if (!strcmp(filename, "-")) fp = stdin; else { fp = fopen(filename, "r"); if (!fp) { fprintf(stderr, "Cannot open file %s: %s\n", filename, strerror(errno)); exit(1); } } pnm = pnm_readpnm(fp, &cols, &rows, &maxval, &fmt); if (!pnm) { fprintf(stderr, "Error reading PNM file: %s\n", strerror(errno)); exit(1); } switch (PNM_FORMAT_TYPE(fmt)) { case PPM_TYPE: normalize_ppm(pnm, cols, rows, maxval); clut_len = fill_clut(pnm, cols, rows); if (clut_len > 0 && clut_len <= 256) { type = "CLUT256"; size = cols*rows; } else { type = "RGB888"; size = cols*rows*3; } break; case PGM_TYPE: type = "GREY256"; size = cols*rows; break; case PBM_TYPE: type = "BW"; size = (cols+7)/8*rows; break; default: fprintf(stderr, "Unknown PNM format %d\n", PNM_FORMAT_TYPE(fmt)); exit(1); } // Print header printf(" /*\n"); printf(" * Image %s\n", name); printf(" */\n\n"); printf("#include \"image.h\"\n\n"); // Print forward declarations printf("static const unsigned char %s_data[];\n", name); if (clut_len > 0 && clut_len <= 256) printf("static const unsigned char %s_clut[];\n", name); printf("\n"); // Print image structure printf("const struct image %s = {\n", name); printf(" width:\t%d,\n", cols); printf(" height:\t%d,\n", rows); printf(" type:\tIMAGE_%s,\n", type); printf(" data:\t%s_data,\n", name); if (clut_len > 0 && clut_len <= 256) { printf(" clut_len:\t%d,\n", clut_len); printf(" clut:\t%s_clut\n", name); } printf("};\n\n"); // Print image data printf("static const unsigned char %s_data[%d] = {\n", name, size); switch (PNM_FORMAT_TYPE(fmt)) { case PPM_TYPE: if (clut_len > 0 && clut_len <= 256) print_clut256_data(pnm, cols, rows, clut_len); else print_rgb888_data(pnm, cols, rows); break; case PGM_TYPE: print_grey256_data(pnm, cols, rows, maxval); break; case PBM_TYPE: print_bw_data(pnm, cols, rows); break; } printf("};\n\n"); // Print image clut if (clut_len > 0 && clut_len <= 256) { printf("static const unsigned char %s_clut[%d] = {\n", name, clut_len*3); print_image_clut(clut_len); printf("};\n\n"); } // Free temporary data ppm_freearray(pnm, rows); }