int main(int argc, char *argv[]) { char *input_image; char whynot[256]; int i, width, height, has_alpha; if (argc < 2) usage(); for (i = 0; i < 6; i++) { char inputfilename[PATH_MAX], outputfilename[PATH_MAX]; if (strlen(argv[1]) > PATH_MAX - 20) { fprintf(stderr, "Length of argv[1] is too long, buster.\n"); return 1; } sprintf(inputfilename, "%s%d.png", argv[1], i); sprintf(outputfilename, "%s-masked%d.png", argv[1], i); printf("Processing %s -> %s\n", inputfilename, outputfilename); input_image = png_utils_read_png_image(inputfilename, 0, 0, 0, &width, &height, &has_alpha, whynot, sizeof(whynot)); if (!input_image) { fprintf(stderr, "png_utils_read_png_image: %s: %s -- skipping.\n", inputfilename, whynot); continue; } if (!has_alpha) { fprintf(stderr, "%s does not have an alpha channel, skipping\n", inputfilename); continue; } level_to_alpha(input_image, width, height); if (png_utils_write_png_image(outputfilename, (unsigned char *) input_image, width, height, 1, 0) != 0) fprintf(stderr, "Failed to save image %s\n", outputfilename); free(input_image); } return 0; }
static char *load_image(const char *filename, int *w, int *h, int *a, int *bytes_per_row) { char *i; char msg[100]; i = png_utils_read_png_image(filename, 0, 0, 0, w, h, a, msg, sizeof(msg)); if (!i) { fprintf(stderr, "%s: cannot load image: %s\n", filename, msg); exit(1); } *bytes_per_row = *w * 3; /* align to 4 byte boundary */ if (*bytes_per_row & 0x03) *bytes_per_row += 4 - (*bytes_per_row & 0x03); return i; }