--- joko/Uni/BSArch/04/bmp_fractal.c 2006/07/01 09:40:29 1.2 +++ joko/Uni/BSArch/04/bmp_fractal.c 2006/07/01 11:58:49 1.4 @@ -4,6 +4,10 @@ * * Uebung 4.4 */ + +// $Id: bmp_fractal.c,v 1.4 2006/07/01 11:58:49 joko Exp $ + +#include #include #include @@ -11,6 +15,7 @@ #define YSIZE 500 #include "algorithm.h" + /* BMP Header */ unsigned char header[54]={0x42,0x4d, // signature BM 0xe6,0x71,0x0b,0x0, // filesize 750054 @@ -29,44 +34,159 @@ 0x0,0x0,0x0,0x0 // number of important colors }; -int main(int argc, char *argv[]) -{ - FILE *fd; - int len,x,y; - char bgr[3]; - short svalue; - int lvalue; - //unsigned char header[54],*ptr=&header[0]; - - fd=fopen("test.bmp","wb+"); - if(NULL==fd) - { - perror("open"); exit(1); - } - len=fwrite(header,1,sizeof(header),fd); //write header - - if(-1==len || len!=sizeof(header)) - { - perror("write"); - exit(2); +void printErrorAndExit(const char *msg, DWORD err) { + LPSTR lpMsgBuf; + if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL )) + { + fprintf(stderr,"%s : %s\n",msg,lpMsgBuf); + LocalFree(lpMsgBuf); + } + else + { + fprintf(stderr,"Error at FormatMesage: %d\n",err=GetLastError()); + } + exit(err); +} + + +void write_blank_file(char *filename) { + + FILE *fd; + int len, i, img_size; + + // open file handle + fd = fopen(filename, "wb+"); + if (NULL == fd) { + perror("open"); + exit(1); + } + + // write bmp header to file + len = fwrite(header, 1, sizeof(header), fd); + + // error checking + if (-1 == len || len != sizeof(header)) { + perror("write"); + exit(2); + } + + // write three null-bytes for each pixel to file to create a black picture + img_size = XSIZE * YSIZE; + for (i = 0; i < img_size; i++) { + len = fwrite("\0\0\0", 1, 3, fd); + if (-1 == len || len != 3) { + perror("write"); + exit(4); } - - for(y=YSIZE-1;y>=0;y--) - { - for(x=0;x=0; y--) { + for (x=0; x