/* * Sample program to generate a small test PNG image. */ #include #include #include #include "png.h" #ifndef png_jmpbuf # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) #endif #define errx(ex, m) do { fprintf(stderr, m); exit(ex); } while (0) int main(argc, argv) int argc; char *argv[]; { png_structp png_ptr; png_infop info_ptr; struct { unsigned char r, g, b } line[256]; png_color_8 sigbit; int i, j; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL); if (!png_ptr) errx(1, "png_create_write_struct"); info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) errx(1, "png_create_info_struct"); if (setjmp(png_jmpbuf(png_ptr))) /* All future errors jump here */ errx(1, "png error"); /* Use stdio */ png_init_io(png_ptr, stdout); png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); png_set_IHDR(png_ptr, info_ptr, 256, /* width */ 256, /* height */ 8, /* bit depth */ PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(png_ptr, info_ptr); for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) { line[j].r = i; line[j].g = (512 -i -j)/2; line[j].b = j; } png_write_row(png_ptr, line); } png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); fclose(stdout); exit(0); }