#include #include #include "bmp.h" extern FILE *BMPf; extern BITMAPFILEHEADER bmp_filehead; extern BITMAPINFOHEADER bmp_infohead; extern unsigned char bmp_4bitpal[4*16]; extern unsigned char bmp_8bitpal[4*256]; extern unsigned char *bmpdata; extern unsigned char infile2[100]; int write_TIMopenBMP(char *file){ if(BMPf = fopen(file,"wb")) return(1); else return(0); } void write_TIMcloseBMP(){ fclose(BMPf); } void write_TIMid(){ unsigned long data; printf(" : WRITING [TIM] filehead\n"); data = 16; // tim ID and version write_dword(data); } void write_TIMflag(){ unsigned long data; printf(" : WRITING [TIM] flags\n"); if(bmp_infohead.biBitCount == 4) data = (1<<3)|0; if(bmp_infohead.biBitCount == 8) data = (1<<3)|1;; if(bmp_infohead.biBitCount == 16) data = (0<<3)|2;; if(bmp_infohead.biBitCount == 24) data = (0<<3)|3;; write_dword(data); } void write_TIMclut(){ unsigned long data; printf(" : WRITING [TIM] cluts\n"); if(bmp_infohead.biBitCount == 4) data = 12 + 16*2; if(bmp_infohead.biBitCount == 8) data = 12 + 256*2; write_dword(data); data = (480<<16)|0; write_dword(data); if(bmp_infohead.biBitCount == 4) data = (1<<16)|16; if(bmp_infohead.biBitCount == 8) data = (1<<16)|256; write_dword(data); write_TIMpal(); } void write_TIMpal(){ unsigned short x,data; if(bmp_infohead.biBitCount == 4){ printf(" : WRITING [TIM] 4bit palette\n"); for(x=0;x<16;x++){ data = (bmp_4bitpal[4*x+0]>>3)<<10; data = data|((bmp_4bitpal[4*x+1]>>3)<<5); data = data|((bmp_4bitpal[4*x+2]>>3)); write_word(data); } } if(bmp_infohead.biBitCount == 8){ printf(" : WRITING [TIM] 8bit palette\n"); for(x=0;x<256;x++){ data = (bmp_8bitpal[4*x+0]>>3)<<10; data = data|((bmp_8bitpal[4*x+1]>>3)<<5); data = data|((bmp_8bitpal[4*x+2]>>3)); write_word(data); } } } void write_TIMdata(){ unsigned long data; printf(" : WRITING [TIM] datas\n"); if(bmp_infohead.biBitCount == 4) data = 12 + (bmp_infohead.biSizeImage>>1); if(bmp_infohead.biBitCount == 8) data = 12 + bmp_infohead.biSizeImage; if(bmp_infohead.biBitCount == 24) data = 12 + bmp_infohead.biSizeImage; write_dword(data); data = (0<<16)|0; write_dword(data); if(bmp_infohead.biBitCount == 4) data = (bmp_infohead.biHeight<<16)|(bmp_infohead.biWidth>>2); if(bmp_infohead.biBitCount == 8) data = (bmp_infohead.biHeight<<16)|(bmp_infohead.biWidth>>1); if(bmp_infohead.biBitCount == 24) data = (bmp_infohead.biHeight<<16)|((bmp_infohead.biWidth>>1)*3); write_dword(data); write_TIMpic(); } void write_TIMpic(){ unsigned long dy,y,x; unsigned char d,d1; if(bmp_infohead.biBitCount == 4){ printf(" : WRITING [TIM] 4bit picture\n"); for(y=0;y>1);x++){ dy = (bmp_infohead.biHeight-1) - y; d =*(bmpdata+(dy*(bmp_infohead.biWidth>>1)+x)); d1 = (d&15)<<4; d = (d>>4)|d1; write_byte(d); } } if(bmp_infohead.biBitCount == 8){ printf(" : WRITING [TIM] 8bit picture\n"); for(y=0;y