标准C读BMP图象的一个小代码

原创 2006年05月29日 17:31:00

#include <stdio.h>
#include <stdlib.h>

//#define BUFFSIZE 1024
#define  WIDTH    10


unsigned char head[1078];
unsigned char pix[WIDTH][WIDTH];
int       width=WIDTH; 
int       heigh;
void          pixread(FILE *fpin);
void       headread(FILE *fpin); 
void          newbmp();


int main()
{
 //int datanum;
 //int i;
 FILE *bmpfp=NULL;
 //int width=WIDTH;

 

///mnt/win1/mywork/picture-process/32
 if((bmpfp=fopen("10x10.bmp","rb"))==NULL){
   printf("Read the bmp file has failed/n");
   exit(1);
   }
                
                 headread(bmpfp);
      pixread(bmpfp);
                        newbmp();    
   
   fclose(bmpfp);
   return 0;
}

 

     
void  headread(FILE *fpin)                               //read the bmp file head 1078 byte
{
 int num1;
 
 
  num1=fread(head,sizeof(char),1078,fpin);
  printf("You have successfully read %d data from bmp file/n",num1);
}

 

void  pixread(FILE *fpin)                                   //read the bmp file pixels data 32*32 byte
{
 int num2 ;
 int i,j;
 int count;
 unsigned char  *pixbuff=NULL;

 heigh=10;
 width=32;
 fseek(fpin,1078,0);
 if((pixbuff=(unsigned char *)malloc(sizeof(char)*320))==NULL){
  printf("Data memory allocation fail!/n");
 }
 num2=fread(pixbuff,sizeof(char),1024,fpin);
        printf("You have successfully read %d data from the bmp file/n",num2);


        for(i=(heigh-1);i>=0;i--){
  count=width-1-i;
  for(j=0;j<width;j++){
    pix[i][j]=pixbuff[count*width+j];
    }
 }
  
 free(pixbuff);
 pixbuff=NULL;

 heigh=10;
 width=32;
 printf("The data are/n");
          for(i=0;i<heigh;i++){
    for(j=0;j<width;j++){
                     printf("%d ",pix[i][j]);
                    }
        printf("/n");
       }
 //BeginWaitCursor();
   printf("Read the data end/n");
}

 


void  newbmp()                                               //write the data that has some change to new bmp file

 int             i,j;
 int             num3;
 int             num4;
 int          count;
 //unsigned char pixbuff[1024];
        FILE            *newfp;
        unsigned char  *pixbuff=NULL;

 for(i=1;i<32;i++) {
  pix[16][i]=pix[15][i]=0;                                //make a small change about old bmp file
     
 }
 
 
 newfp=fopen("c:/new1.bmp","wb");///mnt/win1/mywork/picture-process/pgm/

        num3=fwrite(head,sizeof(char),1078,newfp);
 printf("You have successfully write %d data to new bmp file/n",num3);


 if((pixbuff=(unsigned char *)malloc(sizeof(char)*width*width))==NULL){
   printf(" Data memory allocation fail!/n");
 }
 
         width=32;                                                 //because the global var has changed

 for(i=(width-1);i>=0;i--){
  count=width-1-i;
  for(j=0;j<width;j++){
   pixbuff[count*width+j]=pix[i][j];
  }
 } 
 
 //for(i=1;i<1025;i++){                                  //display the data
 // printf("%d ",pixbuf[i]);
 // if(i%32==0){
 //      putchar('/n');
 // }
 //}  
 fseek(newfp,1078,0);
 num4=fwrite(pixbuff,sizeof(char),1024,newfp);     
        printf("You have successfully write %d data to new bmp file/n",num4);
 
 free(pixbuff);
 pixbuff=NULL;
}

//根据图象的bitcounts不同,数组定义也不同,如24位BMP图象,3字节表示一像素

C语言读取txt里面的图像数据字符串换成十六进制然后保存为bmp格式的图像文件

C语言读取txt里面的图像数据字符串换成十六进制然后保存为bmp格式的图像文件 一、现在因为某种原因,图片的数据是放在image_data.txt文件里面,现在我需要把image_data....
  • qq_37858386
  • qq_37858386
  • 2018年01月26日 18:16
  • 90

C语言读写BMP文件

参考的是:用C语言进行BMP文件的读写 - 计算机视觉小菜鸟的专栏 - 博客频道 - CSDN.NET...
  • u012564690
  • u012564690
  • 2014年05月14日 13:40
  • 2009

C/C++ BMP(24位真彩色)图像处理(4)------图像の旋转

历经一个多月,CSDN貌似终于好像把文章列表阅读量信息归零BUG给修好了,于是乎放篇做期末大作业时写的文章上来测测效果,可别又像上次一样一发文章就又坑爹了啊! 本篇谈的是图像的旋转,不算是什么新鲜的题...
  • oHanTanYanYing
  • oHanTanYanYing
  • 2014年09月21日 01:18
  • 3769

【数字图像处理一】BMP图像的读取

VC6.0显示24位BMP图像
  • u013580497
  • u013580497
  • 2015年07月07日 10:05
  • 1545

C语言读BMP图片

#include //包含相关bmp格式的定义结构 #include #include int bmpWidth; //bmp图片宽度(像素) int bmpHeight; //bm...
  • jianqi2010
  • jianqi2010
  • 2011年03月27日 01:51
  • 4023

BMP头文件格式以及C语言读取头文件

BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。 位图文件主要分为如下3个部分...
  • witxjp
  • witxjp
  • 2012年07月12日 19:49
  • 2099

C/C++ BMP(24位真彩色)图像处理(1)------图像の打开与数据区处理

在图像处理过程中,通常以MATLAB代码进行模拟,
  • oHanTanYanYing
  • oHanTanYanYing
  • 2014年04月20日 17:44
  • 3888

Matlab读取BMP位图并显示亮度值三维图

%---------------------------------------------------------------% 读24位位图,转为8位灰度图,绘制灰度图的三维图.% April 1...
  • andylida
  • andylida
  • 2010年05月12日 20:06
  • 1279

linux下读取bmp

由于windows中所用头文件"windows.h"在linux下不可用,故自己建立相关的头文件,定义bmp文件的存储结构及格式代码如下: /* linux_bmp.h*//* * Copyright...
  • scut1135
  • scut1135
  • 2010年05月11日 17:28
  • 2933

纯C下的读写BMP文件代码

 纯C代码下读写BMP文件代码,简单易懂。 /**//***************************************************************  Copyrigh...
  • flylonginsky
  • flylonginsky
  • 2007年10月24日 15:00
  • 10756
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:标准C读BMP图象的一个小代码
举报原因:
原因补充:

(最多只允许输入30个字)