20 #define SUB_NAME ENC_PNG
21 #elif defined LINUXF90
22 #define SUB_NAME ENC_PNG
23 #elif defined LINUXG95
24 #define SUB_NAME enc_png__
25 #elif defined HP || defined AIX
26 #define SUB_NAME enc_png
27 #elif defined SGI || defined LINUX || defined VPP5000 || defined APPLE
28 #define SUB_NAME enc_png_
37 unsigned char *stream_ptr;
68 offset=mem->stream_len;
71 memcpy(ptr+offset,data,length);
72 mem->stream_len += length;
106 g2int j,bytes,pnglen,bit_depth;
110 png_bytep **row_pointers;
117 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
122 info_ptr = png_create_info_struct(png_ptr);
125 png_destroy_write_struct(&png_ptr,(png_infopp)NULL);
133 if (setjmp(png_jmpbuf(png_ptr)))
135 png_destroy_write_struct(&png_ptr, &info_ptr);
143 write_io_ptr.stream_ptr=(png_voidp)pngbuf;
144 write_io_ptr.stream_len=0;
150 png_set_write_fn(png_ptr,(png_voidp)&write_io_ptr,(png_rw_ptr)
user_write_data,
161 color_type=PNG_COLOR_TYPE_GRAY;
164 color_type=PNG_COLOR_TYPE_RGB;
166 else if (*nbits == 32 ) {
168 color_type=PNG_COLOR_TYPE_RGB_ALPHA;
170 png_set_IHDR(png_ptr, info_ptr, *width, *height,
171 bit_depth, color_type, PNG_INTERLACE_NONE,
172 PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
179 row_pointers=malloc((*height)*
sizeof(png_bytep));
180 for (j=0;j<*height;j++) row_pointers[j]=(png_bytep *)(data+(j*(*width)*bytes));
181 png_set_rows(png_ptr, info_ptr, (png_bytepp)row_pointers);
186 png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
192 png_destroy_write_struct(&png_ptr, &info_ptr);
194 pnglen=write_io_ptr.stream_len;