zoukankan      html  css  js  c++  java
  • 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 !!!! 
    ");
    31     else  
    32     {       
    33         printf("open pic_file sucess! 
    ");
    34     
    35         fseek(fp0,10L,0); // 找到图片数据存储位置地址
    36         fread(&pic_data_add,4,1,fp0);
    37         printf("
    bmp_data_begin is %.4x 
    ",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 ("
    txt data file open sucess !
    
    ");
    54     
    55         for (i=0;i<pic_size;i++)
    56         {
    57             fprintf (fp1,"%.2x
    ",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 ("
    checkPic_data.txt data file open sucess !
    
    ");
    69     
    70         for (i=0;i<pic_size;i++)
    71         {
    72             if(!(i%1024)) fprintf (fp2,"
    
    
    %.2x",bmp_data[i]); 
    73             else if(!(i%8)) fprintf (fp2,"
    %.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) 
  • 相关阅读:
    如何在linux系统中设置静态ip地址
    spring 学习
    java 反射机制和invoke方法
    CentoS7装机
    eclipse 添加jar包的方式
    No-args constructor for class does not exist. Register an InstanceCreator with G
    freemarker页面如何获取绝对路径basePath
    MySQL备份还原
    MySQL用户授权与权限
    CentOS7修改SSH远程连接端口
  • 原文地址:https://www.cnblogs.com/sepeng/p/3868955.html
Copyright © 2011-2022 走看看