20 #define SUB_NAME DEC_PNG
21 #elif defined LINUXF90
22 #define SUB_NAME DEC_PNG
23 #elif defined LINUXG95
24 #define SUB_NAME dec_png__
25 #elif defined HP || defined AIX
26 #define SUB_NAME dec_png
27 #elif defined SGI || defined LINUX || defined VPP5000 || defined APPLE
28 #define SUB_NAME dec_png_
36 unsigned char *stream_ptr;
56 ptr=(
void *)mem->stream_ptr;
57 offset=mem->stream_len;
59 memcpy(data,ptr+offset,length);
60 mem->stream_len += length;
78 int interlace,color,compres,filter,bit_depth;
79 g2int j,k,n,bytes,clen;
81 png_infop info_ptr,end_info;
82 png_bytepp row_pointers;
90 if ( png_sig_cmp(pngbuf,0,8) != 0)
97 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
102 info_ptr = png_create_info_struct(png_ptr);
105 png_destroy_read_struct(&png_ptr,(png_infopp)NULL,(png_infopp)NULL);
109 end_info = png_create_info_struct(png_ptr);
112 png_destroy_read_struct(&png_ptr,(png_infopp)info_ptr,(png_infopp)NULL);
120 if (setjmp(png_jmpbuf(png_ptr)))
122 png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);
130 read_io_ptr.stream_ptr=(png_voidp)pngbuf;
131 read_io_ptr.stream_len=0;
137 png_set_read_fn(png_ptr,(png_voidp)&read_io_ptr,(png_rw_ptr)
user_read_data);
145 png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
151 row_pointers = png_get_rows(png_ptr, info_ptr);
160 (void)png_get_IHDR(png_ptr, info_ptr, &w32, &h32,
161 &bit_depth, &color, &interlace, &compres, &filter);
175 if ( color == PNG_COLOR_TYPE_RGB ) {
178 else if ( color == PNG_COLOR_TYPE_RGB_ALPHA ) {
188 for (j=0;j<*height;j++) {
189 for (k=0;k<clen;k++) {
190 cout[n]=*(row_pointers[j]+k);
199 png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);