清霜一梦

bmp图片数据提取

0
阅读(1500)

仿照别人的程序写的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 修改成int12 发现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=013     #define pic_width   original_pic_width14 #else 15     #define pic_width   (original_pic_width + 4 - original_pic_width%4 )16 #endif17  18 #define pic_size  (pic_width * original_pic_height)

复制代码