diff options
Diffstat (limited to 'src/lib/png.c')
-rw-r--r-- | src/lib/png.c | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/lib/png.c b/src/lib/png.c deleted file mode 100644 index d12a765..0000000 --- a/src/lib/png.c +++ /dev/null @@ -1,64 +0,0 @@ -#include <lib/png.h> - -#include <stdio.h> -#include <png.h> - -// Save bitmap to file -void save_png(struct bitmap_t* bitmap, char* fname) -{ - FILE *fp; - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - uint8_t pixel_size = 3; - uint8_t pixel_depth = 8; - png_byte ** row_pointers = NULL; - size_t x, y; - fp = fopen(fname, "wb"); - if (fp == NULL) { - fprintf(stderr, "Error opening file\n"); - return; - } - png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) { - fprintf(stderr, "Error creating write structure\n"); - fclose(fp); - return; - } - info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) { - fprintf(stderr, "Error creating info structure\n"); - fclose(fp); - return; - } - if (setjmp(png_jmpbuf(png_ptr))) { - fprintf(stderr, "Error setting jmp\n"); - fclose(fp); - return; - } - png_set_IHDR(png_ptr, info_ptr, - bitmap->width, bitmap->height, - pixel_depth, - PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, - PNG_FILTER_TYPE_DEFAULT); - - row_pointers = png_malloc(png_ptr, bitmap->height*sizeof(png_byte*)); - for (y = 0; y < bitmap->height; y++) { - png_byte *row = png_malloc(png_ptr, sizeof(uint8_t)*bitmap->width*pixel_size); - row_pointers[y] = row; - for (x = 0; x < bitmap->width; x++) { - *row++ = bitmap->image_buffer[x + y*bitmap->width].red; - *row++ = bitmap->image_buffer[x + y*bitmap->width].green; - *row++ = bitmap->image_buffer[x + y*bitmap->width].blue; - } - } - png_init_io(png_ptr, fp); - png_set_rows(png_ptr, info_ptr, row_pointers); - png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); - for (y = 0; y < bitmap->height; y++) { - png_free(png_ptr, row_pointers[y]); - } - png_free(png_ptr, row_pointers); - png_destroy_write_struct(&png_ptr, &info_ptr); - fclose(fp); -} - |