#include #include #include #include "bmpheader.h" char nfilein[64]; FILE *bitfile; int filelen; char *datas; RGBQUAD *RGBQUADarray; int i,q, tmp; int BYTElength; int main( int argc, char *argv[] ) { if(argc==1){ printf("No Input File Specified! Usage = BMPHeader filename.bmp\n\n"); return 0; } else { strncpy(nfilein,argv[1],64); } bitfile=fopen(nfilein, "rb"); if(bitfile==NULL){printf("Failed to Bitmap [%s] \n\n", nfilein);return 0;} fseek(bitfile,0,SEEK_END); filelen=ftell(bitfile); fseek(bitfile,0,SEEK_SET); filelen-=ftell(bitfile); datas=malloc(sizeof(char)*filelen); fread(datas, sizeof( char ), filelen, bitfile ); fclose(bitfile); BITMAPFILEHEADER.bfType[0]=0x0;BITMAPFILEHEADER.bfSize[0]=0x0; BITMAPFILEHEADER.bfReserved1[0]=0x0; BITMAPFILEHEADER.bfReserved2[0]=0x0;BITMAPFILEHEADER.bfOffBits[0]=0x0; BITMAPINFOHEADER.biSize[0]=0x0; BITMAPINFOHEADER.biWidth[0]=0x0;BITMAPINFOHEADER.biHeight[0]=0x0; BITMAPINFOHEADER.biPlanes[0]=0x0;BITMAPINFOHEADER.biBitCount[0]=0x0; BITMAPINFOHEADER.biCompression[0]=0x0;BITMAPINFOHEADER.biSizeImage[0]=0x0; BITMAPINFOHEADER.biXPelsPerMeter[0]=0x0; BITMAPINFOHEADER.biYPelsPerMeter[0]=0x0;BITMAPINFOHEADER.biClrUsed[0]=0x0; BITMAPINFOHEADER.biClrImportant[0]=0x0; memcpy(&BITMAPFILEHEADER.bfType[0],&datas[0],2); memcpy(&BITMAPFILEHEADER.bfSize[0],&datas[2],4); memcpy(&BITMAPFILEHEADER.bfReserved1[0],&datas[6],2);; memcpy(&BITMAPFILEHEADER.bfReserved2[0],&datas[8],2); memcpy(&BITMAPFILEHEADER.bfOffBits[0],&datas[0x0A],4); memcpy(&BITMAPINFOHEADER.biSize[0],&datas[0x0E],4); memcpy(&BITMAPINFOHEADER.biWidth[0],&datas[0x12],4); memcpy(&BITMAPINFOHEADER.biHeight[0],&datas[0x16],4); memcpy(&BITMAPINFOHEADER.biPlanes[0],&datas[0x1A],2); memcpy(&BITMAPINFOHEADER.biBitCount[0],&datas[0x1C],2); memcpy(&BITMAPINFOHEADER.biCompression[0],&datas[0x1E],4); memcpy(&BITMAPINFOHEADER.biSizeImage[0],&datas[0x22],4); memcpy(&BITMAPINFOHEADER.biXPelsPerMeter[0],&datas[0x26],4); memcpy(&BITMAPINFOHEADER.biYPelsPerMeter[0],&datas[0x2A],4); memcpy(&BITMAPINFOHEADER.biClrUsed[0],&datas[0x2E],4); memcpy(&BITMAPINFOHEADER.biClrImportant[0],&datas[0x32],4); if(BITMAPINFOHEADER.biBitCount[0]<=0x08){ RGBQUADarray=malloc(((*(unsigned int *) (BITMAPFILEHEADER.bfOffBits)-(*(unsigned int *)(BITMAPINFOHEADER.biSize + 0x0E))/4))); for(i=0;i<((*(unsigned int *) (BITMAPFILEHEADER.bfOffBits)-(*(unsigned int *) BITMAPINFOHEADER.biSize+ 0x0E))/4);i++){ RGBQUADarray[i].rgbBlue[0]=0x0;RGBQUADarray[i].rgbGreen[0]=0x0; RGBQUADarray[i].rgbRed[0]=0x0;RGBQUADarray[i].rgbReserved[0]=0x0; tmp=(*(unsigned int *)BITMAPINFOHEADER.biSize)+(4*i)+0x0E; memcpy(&RGBQUADarray[i].rgbBlue[0],&datas[tmp],1); memcpy(&RGBQUADarray[i].rgbGreen[0],&datas[tmp+1],1); memcpy(&RGBQUADarray[i].rgbRed[0],&datas[tmp+2],1); memcpy(&RGBQUADarray[i].rgbReserved[0],&datas[tmp+3],1); }} BYTElength=(int)(filelen-*(unsigned int*)BITMAPFILEHEADER.bfOffBits); printf("--------------------------------------------------------------------------------\n"); printf(" BMPHeader by Riftor riftor@g615.co.uk (www.g615.co.uk) (www.illuminus.org.uk) \n"); printf("--------------------------------------------------------------------------------\n"); printf(" Tip: To dump this info to a file run BMPHeader filename.bmp > dump.txt \n\n"); printf("Input file = %s\n\n", nfilein); printf("BITMAPFILEHEADER = \n"); printf(" bfType = %s\n", BITMAPFILEHEADER.bfType); printf(" bfSize = %d (0x%04X)\n", *(unsigned int *)BITMAPFILEHEADER.bfSize, *(unsigned int *)BITMAPFILEHEADER.bfSize); printf(" bfReserved1 = %d (0x%02X)\n", *(unsigned short *)BITMAPFILEHEADER.bfReserved1, *(unsigned short *)BITMAPFILEHEADER.bfReserved1); printf(" bfReserved2 = %d (0x%02X)\n", *(unsigned short *)BITMAPFILEHEADER.bfReserved2, *(unsigned short *)BITMAPFILEHEADER.bfReserved2); printf(" bfOffBits = %d (0x%04X)\n", *(unsigned int *)BITMAPFILEHEADER.bfOffBits, *(unsigned int *)BITMAPFILEHEADER.bfOffBits); printf("\nBITMAPINFOHEADER = \n"); printf(" biSize = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biSize, *(unsigned int *)BITMAPINFOHEADER.biSize); printf(" biWidth = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biWidth, *(unsigned int *)BITMAPINFOHEADER.biWidth); printf(" biHeight = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biHeight, *(unsigned int *)BITMAPINFOHEADER.biHeight); printf(" biPlanes = %d (0x%02X)\n", *(unsigned short *)BITMAPINFOHEADER.biPlanes, *(unsigned short *)BITMAPINFOHEADER.biPlanes); printf(" biBitCount = %d (0x%02X)\n", *(unsigned short *)BITMAPINFOHEADER.biBitCount, *(unsigned short *)BITMAPINFOHEADER.biBitCount); printf(" biCompression = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biCompression, *(unsigned int *)BITMAPINFOHEADER.biCompression); printf(" biSizeImage = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biSizeImage, *(unsigned int *)BITMAPINFOHEADER.biSizeImage); printf(" biXPelsPerMeter = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biXPelsPerMeter,(unsigned int *)BITMAPINFOHEADER.biXPelsPerMeter); printf(" biYPelsPerMeter = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biYPelsPerMeter, (unsigned int *)BITMAPINFOHEADER.biYPelsPerMeter); printf(" biClrUsed = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biClrUsed,(unsigned int)BITMAPINFOHEADER.biClrUsed); printf(" biClrImportant = %d (0x%04X)\n", *(unsigned int *)BITMAPINFOHEADER.biClrImportant, *(unsigned int *)BITMAPINFOHEADER.biClrImportant); printf("\nRGBQUAD (%d entries) = \n", ((*(unsigned int *) (BITMAPFILEHEADER.bfOffBits)-(*(unsigned int*)BITMAPINFOHEADER.biSize + 0x0E))/4)-1); for(q=0;q<((*(unsigned int *) (BITMAPFILEHEADER.bfOffBits)-((*(unsigned int*)BITMAPINFOHEADER.biSize) + 0x0E))/4);q++){ printf(" %d = %02X %02X %02X %02X\n",q,*(unsigned char *)RGBQUADarray[q].rgbBlue,*(unsigned char *)RGBQUADarray[q].rgbGreen,*(unsigned char *)RGBQUADarray[q].rgbRed,*(unsigned char *)RGBQUADarray[q].rgbReserved); } printf("\nBYTES (%d of data) = \n", BYTElength); for(q=0;q<(BYTElength);q=q+16){ printf(" "); for(i=0;i<16;i++){ printf("%02X ", ((unsigned char)(datas[q+i+(*(unsigned int *)BITMAPFILEHEADER.bfOffBits)]))); } printf("\n"); } printf("\n"); free(RGBQUADarray); free(datas); return 0; }