18 #include <grass/gis.h> 21 static void read_data(png_structp png_ptr, png_bytep data, png_size_t length)
29 fp = (FILE *) png_get_io_ptr(png_ptr);
37 check = fread(data, 1, length, fp);
46 static png_struct *png_ptr;
47 static png_info *info_ptr;
52 png_uint_32 i_width, i_height;
53 int depth, color_type;
56 png_create_read_struct(PNG_LIBPNG_VER_STRING, &jbuf,
NULL,
NULL);
60 info_ptr = png_create_info_struct(png_ptr);
64 if (setjmp(png_jmpbuf(png_ptr)))
71 png_set_read_fn(png_ptr, input, read_data);
73 png_read_info(png_ptr, info_ptr);
75 png_get_IHDR(png_ptr, info_ptr, &i_width, &i_height,
83 (
"PNG: input file has incorrect dimensions: expected: %dx%d got: %lux%lu",
87 if (color_type != PNG_COLOR_TYPE_RGB_ALPHA)
91 if (color_type != PNG_COLOR_TYPE_PALETTE)
99 png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
NULL);
101 if (num_trans != 1 || trans[0] != 0)
106 png_set_invert_alpha(png_ptr);
112 png_get_PLTE(png_ptr, info_ptr, &png_pal, &num_palette);
114 if (num_palette > 256)
117 for (i = 0; i < num_palette; i++) {
129 png_read_row(png_ptr, q,
NULL);
132 for (x = 0; x <
png.
width; x++, p++) {
142 for (x = 0; x <
png.
width; x++, p++, q++)
148 png_read_end(png_ptr,
NULL);
150 png_destroy_read_struct(&png_ptr, &info_ptr,
NULL);
GRASS png display driver - header file.
unsigned char palette[256][4]
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
unsigned int png_get_color(int r, int g, int b, int a)
void G_free(void *buf)
Free allocated memory.