#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <png.h>
int write_png_ (char *path,png_byte IN[2048*2048*2],int *NBPP,int *PNGX, int *PNGY) {
int i, j;
png_info *info_ptr;
png_struct *png_ptr;
png_byte *row_pointers[2048];
char *path_tmp;
path_tmp=malloc(1024);
//printf("%s\n",path);
char *ch="&";
path_tmp=strtok(path,ch);
printf("opening %s\n",path_tmp);
FILE *fp = fopen(path_tmp, "wb");
for (i=0;i<*PNGY;i++){
row_pointers[i]=&(IN[i*(*NBPP/8)*(*PNGX)]);
//printf("%d\n",i);
}
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL) {
fprintf(stderr, "cannot allocate LIBPNG structure");
exit(1);
}
info_ptr = png_create_info_struct (png_ptr);
if (info_ptr == NULL) {
png_destroy_write_struct (&png_ptr, (png_infopp)NULL);
fprintf(stderr, "cannot allocate LIBPNG structures");
exit(2);
}
png_init_io (png_ptr, fp);
// png_set_compression_level(png_ptr,9);
png_set_IHDR(png_ptr, info_ptr, *PNGX, *PNGY,
*NBPP, 0, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, 0);
png_write_info(png_ptr, info_ptr);
png_set_packing (png_ptr);
// printf("encore %s\n",path);
png_write_image(png_ptr,row_pointers);
png_write_end(png_ptr, NULL);
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
}