#include "Image_Exporter.h" int saveToPNG(RS_IMAGE *img, char *tex_name) { char tex_path[64]; FILE *_png_f = NULL; png_structp png_ptr = NULL; png_infop info_ptr = NULL; //size_t x,y; png_byte **row_ptrs = NULL; //int pixel_size = 3; //int depth = 8; strcpy(tex_path,tex_name); strcat(tex_path, ".png"); _png_f = fopen(tex_path, "wb"); if (_png_f == NULL) return EXIT_FAILURE; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) { fclose(_png_f); return EXIT_FAILURE; } info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { fclose(_png_f); return EXIT_FAILURE; } // Set image attributes png_set_IHDR(png_ptr, info_ptr, img->width, img->height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); // Init PNG datas row_ptrs = png_malloc(png_ptr, img->height * sizeof(png_byte)); /*for (y=0; yheight; y++) { png_byte *row = png_malloc(png_ptr, img->width*sizeof(unsigned char)*3); row_ptrs[y] = row; for (x=0; xwidth; x++) { unsigned char pixel[3] = pixelAt(img->pixels); } }*/ memcpy(row_ptrs, img->pixels, sizeof(unsigned char)*3*img->height*img->width); png_init_io(png_ptr, _png_f); png_set_rows(png_ptr, info_ptr, row_ptrs); png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); png_free(png_ptr, row_ptrs); png_destroy_write_struct(&png_ptr, &info_ptr); fclose(_png_f); return EXIT_SUCCESS; }