47 png->
f = g_fopen(filename,
"rb");
51#define NUM_BYTES_CHECK (8)
63 png->
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
75 png_destroy_read_struct(&png->
png_ptr, NULL, NULL);
79 if(setjmp(png_jmpbuf(png->
png_ptr)))
100 if(png->
color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png->
png_ptr);
105 png_set_expand_gray_1_2_4_to_8(png->
png_ptr);
114 png_set_gray_to_rgb(png->
png_ptr);
123#undef NUM_BYTES_CHECK
131 if(setjmp(png_jmpbuf(png->
png_ptr)))
138 png_bytep *row_pointers = malloc(
sizeof(png_bytep) * png->
height);
140 png_bytep row_pointer = (png_bytep)
out;
143 for(
int y = 0; y < png->
height; y++)
145 row_pointers[y] = row_pointer + (size_t)y * rowbytes;
148 png_read_image(png->
png_ptr, row_pointers);
162 const char *ext = filename + strlen(filename);
163 while(*ext !=
'.' && ext > filename) ext--;
181 img->
dsc.
bpp = 4 *
sizeof(float);
184 img->
flags &= ~DT_IMAGE_RAW;
185 img->
flags &= ~DT_IMAGE_S_RAW;
186 img->
flags &= ~DT_IMAGE_HDR;
202 fprintf(stderr,
"[png_open] could not alloc full buffer for image `%s'\n", img->
filename);
214 fprintf(stderr,
"[png_open] could not alloc intermediate buffer for image `%s'\n", img->
filename);
221 fprintf(stderr,
"[png_open] could not read image `%s'\n", img->
filename);
225 for(
size_t j = 0; j <
height; j++)
229 for(
int k = 0;
k < 3;
k++)
230 mipbuf[4 * (j *
width +
i) +
k] = buf[3 * (j *
width +
i) +
k] * (1.0f / 255.0f);
233 for(
int k = 0;
k < 3;
k++)
234 mipbuf[4 * (j *
width +
i) +
k] = (256.0f * buf[2 * (3 * (j *
width +
i) +
k)]
235 + buf[2 * (3 * (j *
width +
i) +
k) + 1]) * (1.0f / 65535.0f);