26 png_error(png_ptr,
"Read Error");
48 if (img_cfp == NULL) {
51 char *
p = strchr( filename,
'.' );
58 png_file =
cfopen( filename ,
"rb" );
67 Assert( png_file != NULL );
78 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
82 mprintf((
"png_read_header: error creating read struct\n"));
88 info_ptr = png_create_info_struct(png_ptr);
91 mprintf((
"png_read_header: error creating info struct\n"));
93 png_destroy_read_struct(&png_ptr, NULL, NULL);
97 if (setjmp(png_jmpbuf(png_ptr)))
99 mprintf((
"png_read_header: something went wrong\n"));
101 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
109 png_read_info(png_ptr, info_ptr);
111 if (w) *w = png_get_image_width(png_ptr, info_ptr);
112 if (h) *h = png_get_image_height(png_ptr, info_ptr);
114 if (bpp) *bpp = (png_get_channels(png_ptr, info_ptr) * png_get_bit_depth(png_ptr, info_ptr));
116 if (img_cfp == NULL) {
121 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
138 png_bytepp row_pointers;
143 strcpy_s( filename, real_filename );
144 char *
p = strchr( filename,
'.' );
150 if (png_file == NULL)
159 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
163 mprintf((
"png_read_bitmap: png_ptr went wrong\n"));
169 info_ptr = png_create_info_struct(png_ptr);
170 if (info_ptr == NULL)
172 mprintf((
"png_read_bitmap: info_ptr went wrong\n"));
174 png_destroy_read_struct(&png_ptr, NULL, NULL);
178 if (setjmp(png_jmpbuf(png_ptr)))
180 mprintf((
"png_read_bitmap: something went wrong\n"));
182 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
190 png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_BGR | PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_STRIP_16, NULL);
191 len = png_get_rowbytes(png_ptr, info_ptr);
193 row_pointers = png_get_rows(png_ptr, info_ptr);
196 *bpp = (
ubyte)(len / png_get_image_width(png_ptr, info_ptr)) << 3;
199 unsigned int height = png_get_image_height(png_ptr, info_ptr);
200 for (i = 0; i <
height; i++) {
201 memcpy(&image_data[i * len], row_pointers[i], len);
204 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
GLfloat GLfloat GLfloat GLfloat h
int cfread(void *buf, int elsize, int nelem, CFILE *fp)
int png_read_bitmap(const char *real_filename, ubyte *image_data, ubyte *bpp, int dest_size, int cf_type)
#define PNG_ERROR_READING
int png_read_header(const char *real_filename, CFILE *img_cfp, int *w, int *h, int *bpp, ubyte *palette)
void png_scp_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
GLint GLsizei GLsizei height
GLubyte GLubyte GLubyte GLubyte w
GLenum GLsizei GLenum GLenum const GLvoid * data
GLenum GLuint GLenum GLsizei length
int cfclose(CFILE *cfile)