Beispiel #1
0
int main(int argc, char* argv[])
{
    char *out_file = NULL;
    char *in_file = NULL;
    int inx=0, iny=0;
    icv_image_t *bif;
    ICV_IMAGE_FORMAT format=ICV_IMAGE_AUTO;
    int c;

    if (argc<2) {
	usage();
	return 1;
    }

    while ((c = bu_getopt(argc, argv, "s:o:w:nbpdmh?")) != -1) {
	switch (c) {
	    case 'o' :
		bu_log("out_file = %s\n", bu_optarg);
		out_file = bu_optarg;
		break;
	    case 's' :
	       inx = iny = atoi(bu_optarg);
	       break;
	    case 'w' :
	       inx = atoi(bu_optarg);
	       break;
	    case 'n' :
	       iny = atoi(bu_optarg);
	       break;
	    case 'b' :
		bu_log("There was in bw\n");
		format = ICV_IMAGE_BW;
		break;
	    case 'p' :
		format = ICV_IMAGE_PIX;
		break;
	    case 'd' :
		format = ICV_IMAGE_DPIX;
		break;
	    case 'm' :
		format = ICV_IMAGE_PPM;
		break;
	    case 'h':
	    default:
		usage();
		return 1;

	}

	bu_log("C= %c, optind = %d\n", c, bu_optind);
    }
    if (bu_optind >= argc) {
	if (isatty(fileno(stdin))) {
	    usage();
	    return 1;
	}
    }
    else {
	in_file = argv[bu_optind];
	bu_optind++;
    }

    bu_log("in_file = %s, out_file = %s\n", in_file, out_file);

    bif = icv_read(in_file, format, inx, iny);
    icv_write(bif,out_file, format);
    icv_destroy(bif);

    return 0;
}
Beispiel #2
0
/* !!! FIXME: this command should not be directly utilizing LIBDM or
 * LIBFB as this breaks library encapsulation.  Generic functionality
 * should be moved out of LIBDM into LIBICV, or be handled by the
 * application logic calling this routine.
 */
int
ged_screen_grab(struct ged *gedp, int argc, const char *argv[])
{

    int i;
    int width = 0;
    int height = 0;
    int bytes_per_pixel = 0;
    int bytes_per_line = 0;
    static const char *usage = "image_name.ext";
    unsigned char **rows = NULL;
    unsigned char *idata = NULL;
    struct icv_image *bif = NULL;	/**< icv image container for saving images */

    if (gedp->ged_dmp_is_null) {
        bu_vls_printf(gedp->ged_result_str, "Bad display pointer.");
        return GED_ERROR;
    }

    if (gedp->ged_dm_get_display_image == NULL) {
        bu_vls_printf(gedp->ged_result_str, "Bad display function pointer.");
        return GED_ERROR;
    }

    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
    GED_CHECK_VIEW(gedp, GED_ERROR);
    GED_CHECK_DRAWABLE(gedp, GED_ERROR);
    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);

    /* initialize result */
    bu_vls_trunc(gedp->ged_result_str, 0);

    /* must be wanting help */
    if (argc == 1) {
        bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
        return GED_HELP;
    }

    if (argc != 2) {
        bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
        return GED_ERROR;
    }

    width = gedp->ged_dm_width;
    height = gedp->ged_dm_height;

    if (width <= 0 || height <= 0) {
        bu_vls_printf(gedp->ged_result_str, "%s: invalid screen dimensions.", argv[1]);
        return GED_ERROR;
    }

    bytes_per_pixel = 3;
    bytes_per_line = width * bytes_per_pixel;

    /* create image file */

    if ((bif = icv_create(width, height, ICV_COLOR_SPACE_RGB)) == NULL) {
        bu_vls_printf(gedp->ged_result_str, "%s: could not create icv_image write structure.", argv[1]);
        return GED_ERROR;
    }

    rows = (unsigned char **)bu_calloc(height, sizeof(unsigned char *), "rows");

    gedp->ged_dm_get_display_image(gedp, &idata);

    for (i = 0; i < height; ++i) {
        rows[i] = (unsigned char *)(idata + ((height-i-1)*bytes_per_line));
        /* TODO : Add double type data to maintain resolution */
        icv_writeline(bif, i, rows[i], ICV_DATA_UCHAR);
    }

    if (bif != NULL) {
        icv_write(bif, argv[1], ICV_IMAGE_AUTO);
        icv_destroy(bif);
        bif = NULL;
    }

    bu_free(rows, "rows");
    bu_free(idata, "image data");

    return GED_OK;
}
Beispiel #3
0
int main(int argc, char* argv[])
{
    char *out_file = NULL;
    char *in_file = NULL;
    int c;
    int inx=0, iny=0;
    int factor=2;
    icv_image_t *bif;
    ICV_IMAGE_FORMAT format=ICV_IMAGE_AUTO;
    ICV_RESIZE_METHOD method = ICV_RESIZE_SHRINK;
    size_t index;

    if (argc<2) {
        usage();
        return 1;
    }

    while ((c = bu_getopt(argc, argv, "s:w:n:M:f:o:bpdmh?")) != -1) {
        switch (c) {
        case 's':
            inx = iny = atoi(bu_optarg);
            break;
        case 'w':
            inx = atoi(bu_optarg);
            break;
        case 'n':
            iny = atoi(bu_optarg);
            break;
        case 'o':
            out_file = bu_optarg;
            break;
        case 'M':
            if (BU_STR_EQUAL(bu_optarg, "under_sample"))
                method = ICV_RESIZE_UNDERSAMPLE;
            else if (BU_STR_EQUAL(bu_optarg, "shrink"))
                method = ICV_RESIZE_SHRINK;
            else {
                usage();
                bu_exit(1, "Wrong Input Argument\n");
            }
            break;
        case 'f':
            factor = atoi(bu_optarg);
            break;
        case 'b':
            format = ICV_IMAGE_BW;
            break;
        case 'p':
            format = ICV_IMAGE_PIX;
            break;
        case 'd':
            format = ICV_IMAGE_DPIX;
            break;
        case 'm':
            format = ICV_IMAGE_PPM;
            break;
        case 'h':
        default:
            usage();
            return 1;

        }
    }
    if (bu_optind >= argc) {
        if (isatty(fileno(stdin))) {
            usage();
            return 1;
        }
    }
    else {
        in_file = argv[bu_optind];
        bu_optind++;
    }

    bif = icv_read(in_file, format, inx, iny);
    icv_resize(bif, method, 0, 0, (unsigned int) factor);
    bu_log("File information width %d height%d\n", bif->width, bif->height);

    for (index = 0; index < 65536; index++)
        bu_log("index = %ld, data = %f\n", index, bif->data[index]);


    icv_write(bif,out_file, format);
    bu_log("File information width %d height%d channels = %d\n", bif->width, bif->height, bif->channels);
    icv_destroy(bif);

    return 0;
}
Beispiel #4
0
int main(int argc, char* argv[])
{
    char *out_file = NULL;
    char *in_file = NULL;
    int c;
    int inx=0, iny=0;
    icv_image_t *bif;
    ICV_IMAGE_FORMAT format=ICV_IMAGE_AUTO;
    double multiplier=0.2;
    if (argc<2) {
	usage();
	return 1;
    }

    while ((c = bu_getopt(argc, argv, "s:w:n:o:%:f:bpdmh?")) != -1) {
	switch (c) {
	    case 's':
		inx = iny = atoi(bu_optarg);
		break;
	    case 'w':
		inx = atoi(bu_optarg);
		break;
	    case 'n':
		iny = atoi(bu_optarg);
		break;
	    case 'o':
		out_file = bu_optarg;
		break;
	    case '%':
		multiplier = atof(bu_optarg) / 100.0;
		if (multiplier < 0.0)
		    bu_exit (1, "tester_icv_fade : percent is negative");
		break;
	    case 'f':
		multiplier = atof(bu_optarg);
		if (multiplier < 0.0)
		    bu_exit(1,"tester_icv_fade : fraction is negative");
		break;
	    case 'b' :
		format = ICV_IMAGE_BW;
		break;
	    case 'p' :
		format = ICV_IMAGE_PIX;
		break;
	    case 'd' :
		format = ICV_IMAGE_DPIX;
		break;
	    case 'm' :
		format = ICV_IMAGE_PPM;
		break;
	    case 'h':
	    default:
		usage();
		return 1;

	}
    }
    if (bu_optind >= argc) {
	if (isatty(fileno(stdin))) {
	    usage();
	    return 1;
	}
    }
    else {
	in_file = argv[bu_optind];
	bu_optind++;
    }

    bif = icv_read(in_file, format, inx, iny);
    icv_fade(bif, multiplier);
    icv_write(bif,out_file, format);
    icv_destroy(bif);

    return 0;
}