Example #1
0
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;
}
Example #2
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;
}
Example #3
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);
}