RSE-Texture/src/Image_Exporter.c
JackCarterSmith 23e8719f8d Add better support
-Add prototype of PNG export function (WIP)
-Updated libs files and information
-Credit work of @dpethes
2019-07-04 23:42:36 +02:00

53 lines
1.4 KiB
C

#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; y<img->height; y++) {
png_byte *row = png_malloc(png_ptr, img->width*sizeof(unsigned char)*3);
row_ptrs[y] = row;
for (x=0; x<img->width; 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;
}