From c84f59058725ca2835bba5450155dffc41e80870 Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Sat, 23 Aug 2025 22:43:36 +0200 Subject: [PATCH] ex0: initial --- exercise0/bitmap.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ exercise0/bitmap.h | 10 ++++++++ exercise0/main.c | 22 ++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 exercise0/bitmap.c create mode 100644 exercise0/bitmap.h create mode 100644 exercise0/main.c diff --git a/exercise0/bitmap.c b/exercise0/bitmap.c new file mode 100644 index 0000000..1ae2548 --- /dev/null +++ b/exercise0/bitmap.c @@ -0,0 +1,63 @@ +#include +#include +#include "bitmap.h" + + + + + + +// save 24-bits bmp file, buffer must be in bmp format: upside-down +void savebmp(char *name, uchar *buffer, int x, int y) { + FILE *f=fopen(name,"wb"); + if(!f) { + printf("Error writing image to disk.\n"); + return; + } + unsigned int size=x*y*3+54; + uchar header[54]={'B','M',size&255,(size>>8)&255,(size>>16)&255,size>>24,0, + 0,0,0,54,0,0,0,40,0,0,0,x&255,x>>8,0,0,y&255,y>>8,0,0,1,0,24,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + fwrite(header,1,54,f); + fwrite(buffer,1,x*y*3,f); + fclose(f); +} + + +// read bmp file and store image in contiguous array +void readbmp(char* filename, uchar* array) { + FILE* img = fopen(filename, "rb"); //read the file + uchar header[54]; + size_t result = fread(header, sizeof(uchar), 54, img); // read the 54-byte header + + if (result != 54) + { + perror("Error reading file.\n"); + return; + } + + // extract image height and width from header + int width = *(int*)&header[18]; + int height = *(int*)&header[22]; + int padding=0; + while ((width*3+padding) % 4!=0) padding++; + + int widthnew=width*3+padding; + uchar* data = calloc(widthnew, sizeof(uchar)); + + for (int i=0; i +#include +#include "bitmap.h" + +#define XSIZE 2560 // Size of before image +#define YSIZE 2048 + + + +int main(void) +{ + uchar *image = calloc(XSIZE * YSIZE * 3, 1); // Three uchars per pixel (RGB) + readbmp("before.bmp", image); + + // Alter the image here + ; + + savebmp("after.bmp", image, XSIZE, YSIZE); + + free(image); + return 0; +}