diff options
Diffstat (limited to 'files.c')
-rw-r--r-- | files.c | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -0,0 +1,50 @@ +/* file-handler.c + * Created: 2023-08-25 + * Author: Aryadev Chavali + * Description: Implementations of writing and loading state->from files + */ + +#include <stdio.h> +#include <string.h> + +#include <stb/stb_image_write.h> + +#include "./lib.h" + +#define CHUNK_SIZE 1024 + +bool write_to_png(state_t *state, const char *filepath) +{ + unsigned char *image_data = + calloc(3 * state->dwidth * state->dwidth, sizeof(*image_data)); + + size_t image_ptr = 0; + + for (size_t i = 0; i < state->dwidth; ++i) + for (size_t j = 0; j < state->dwidth; ++j, image_ptr += 3) + { + unsigned char colour[3] = {0}; + uint64_t sandpile = state->data[(i * state->dwidth) + j]; + if (sandpile == 0) + colour[0] = colour[1] = colour[2] = 0; + else if (sandpile == 1) + colour[0] = colour[2] = 255; + else if (sandpile == 2) + { + colour[0] = 255; + colour[1] = colour[2] = 20; + } + else if (sandpile == 3) + { + colour[2] = 255; + colour[0] = colour[1] = 20; + } + + memcpy(image_data + image_ptr, colour, sizeof(*colour) * 3); + } + + stbi_write_png(filepath, state->dwidth, state->dwidth, 3, image_data, + 3 * state->dwidth); + free(image_data); + return true; +} |