/* file-handler.c * Created: 2023-08-25 * Author: Aryadev Chavali * Description: Implementations of writing and loading state->from files */ #include #include #include #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; }