bmp图片数据提取
仿照别人的程序写的bmp数据提取C代码,并将提取的数据放到txt文档中
1 /* 2 date : 2014/06/24 3 designer :pengxiaoen 4 version : dev4.9.9.0 5 function :读取bmp图片的图片数据信息到文件txt中。参考了其他的程序 6 7 bmp 文件格式: 第10个字节处存放图像数据起始地址 —— 此程序中25行用到 8 第36h - 0436h 字节处存放调色板 —— 此程序中没有用到 9 10 ***************************************************************************************** 11 检测数据读取:第37行替换第35行,并且屏蔽掉42行-73行 bmp_data 修改成int 12 发现37行打印出来的数据为1a111111.使用存储格式看.bmp的时候发现对 13 应的位置数据为1111111a。 14 15 因为原始程序中使用的 bmp_data 是char 型,也就是读取数据的时候是一个像素点一个 16 像素点的读,所以就避免了倒序的情况发生 17 ******************************************************************************************* 18 */ 19 #include "stdio.h" 20 #include "FileDefine.h" 21 22 main() 23 { 24 unsigned char bmp_data [pic_size]; 25 unsigned int i , pic_data_add ; 26 27 //********************************************************** 28 FILE *fp0 = fopen(pic_file ,"rb"); //开启图片 29 if(fp0==NULL) 30 printf("open pic_file fault !!!! \n"); 31 else 32 { 33 printf("open pic_file sucess! \n"); 34 35 fseek(fp0,10L,0); // 找到图片数据存储位置地址 36 fread(&pic_data_add,4,1,fp0); 37 printf("\nbmp_data_begin is %.4x \n",pic_data_add ); 38 rewind(fp0); 39 fseek(fp0,pic_data_add,0); // 指针指向图片数据存储位置 40 fread(bmp_data,pic_size,1,fp0); //将数据读取到数组中 41 42 //fread(bmp_data,4,1,fp0); printf("%x",bmp_data[0]) ; 43 44 45 fclose(fp0); 46 } 47 //********************************************************** 48 FILE *fp1 = fopen(pic_data ,"w"); // 打开文件为存储图片数据做准备 49 if(fp1==NULL) 50 printf ("txt data file open fault !!!!!"); 51 else 52 { 53 printf ("\ntxt data file open sucess !\n\n"); 54 55 for (i=0;i<pic_size;i++) 56 { 57 fprintf (fp1,"%.2x\n",bmp_data[i]); // 将数组中的数据放到txt文档中 58 } 59 fclose(fp1); 60 } 61 62 //***************为了验证Verilog中读取的数据是否正确而额外加的代码*********************** 63 FILE *fp2 = fopen("checkPic_data.txt" ,"w"); // 打开文件为存储图片数据做准备 64 if(fp2==NULL) 65 printf ("checkPic_data.txt data file open fault !!!!!"); 66 else 67 { 68 printf ("\ncheckPic_data.txt data file open sucess !\n\n"); 69 70 for (i=0;i<pic_size;i++) 71 { 72 if(!(i%1024)) fprintf (fp2,"\n\n\n%.2x",bmp_data[i]); 73 else if(!(i%8)) fprintf (fp2,"\n%.2x",bmp_data[i]); 74 else fprintf (fp2,"%.2x",bmp_data[i]); // 将数组中的数据放到checkPic_data文档中 75 } 76 fclose(fp2); 77 } 78 79 system ("pause"); 80 }
1 #define pic_file "flower.bmp" 2 #define pic_data "pic_data.txt" 3 #define bmp_file_rslt "sobel_rslt1.bmp" 4 5 #define original_pic_height 768 6 #define original_pic_width 1024 7 8 9 10 11 12 #ifdef original_pic_width%4=0 13 #define pic_width original_pic_width 14 #else 15 #define pic_width (original_pic_width + 4 - original_pic_width%4 ) 16 #endif 17 18 #define pic_size (pic_width * original_pic_height)