Clean up rif.h a bit

ext-image-capture
itycodes 3 weeks ago
parent 4234358b2b
commit dc936797c7

13
rif.h

@ -13,15 +13,18 @@ typedef struct rif {
#define RIF_FORMAT_R8G8B8 0 #define RIF_FORMAT_R8G8B8 0
#define RIF_FORMAT_R8G8B8A8 1 #define RIF_FORMAT_R8G8B8A8 1
// TODO detect endianess - this breaks on big endian systems.
void write_rif_little(char* path, uint32_t width, uint32_t size, uint8_t format, void* data) { void write_rif_little(char* path, uint32_t width, uint32_t size, uint8_t format, void* data) {
#define IMG_SIZE 17 + size // 17 is the size of raw_img excluding the data field // TODO is this better than just hardcoding 17?
rif_t* img = malloc(IMG_SIZE); const uint32_t header_size = sizeof(rif_t) - sizeof(uint8_t*);
const uint64_t img_size = header_size + size;
rif_t* img = malloc(img_size);
char magic[] = RIF_MAGIC_LITTLE; char magic[] = RIF_MAGIC_LITTLE;
memcpy(((char*)img)+0, magic, 8); memcpy(&img->magic_num, magic, 8);
img->width = width; img->width = width;
img->format = format; img->format = format;
memcpy(((char*)img)+17, data, size); memcpy(&img->data, data, size);
FILE* output_file = fopen(path, "w"); FILE* output_file = fopen(path, "w");
fwrite(img, 1, IMG_SIZE, output_file); fwrite(img, 1, img_size, output_file);
free(img); free(img);
} }

Loading…
Cancel
Save