c语言fwrite源码(【求源码】求一个能把bmp位图读到数组里的C语言源码,网上bmp格式看不懂谢谢)

2026-02-05 00:00:02 0

c语言fwrite源码(【求源码】求一个能把bmp位图读到数组里的C语言源码,网上bmp格式看不懂谢谢)

本篇文章给大家谈谈c语言fwrite源码,以及【求源码】求一个能把bmp位图读到数组里的C语言源码,网上bmp格式看不懂谢谢对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

【求源码】求一个能把bmp位图读到数组里的C语言源码,网上bmp格式看不懂谢谢

#ifndef IMAGE_H
#define IMAGE_H
void image_info(FILE* file);
void image_save(FILE *file);
void image_gray();
void image_binarization();
void image_opposite();
void image_channel();   //抽取RGB通道
void image_bright();//改变图像亮度
typedef struct BMP
{
 //14字节
 unsigned short    bfType;            //文件标识 2字节 必须为BM 
    unsigned int      bfSize;                //文件大小 4字节 
    unsigned short    bfReserved1;        //保留,每字节以"00"填写 2字节 
    unsigned short    bfReserved2;        //同上 2字节 
    unsigned int      bfOffBits;            //记录图像数据区的起始位置(图象数据相对于文件头字节的偏移量)。 4字节
    //40字节
    unsigned int  biSize;                //表示本结构的大小 4字节 
    int    biWidth;                //位图的宽度  4字节 
    int    biHeight;               //位图的高度  4字节 
    unsigned short   biPlanes;            //永远为1 ,   2字节 
    unsigned short   biBitCount;        //位图的位数  分为1 4 8 16 24 32   2字节 
    unsigned int  biCompression;       //压缩说明   4字节 
    unsigned int  biSizeImage;            //表示位图数据区域的大小以字节为单位  4字节 
    int   biXPelsPerMeter;                //用象素/米表示的水平分辨率   4字节 
    int   biYPelsPerMeter;                //用象素/米表示的垂直分辨率   4字节 
    unsigned int  biClrUsed;            //位图使用的颜色索引数   4字节 
    unsigned int  biClrImportant;        //对图象显示有重要影响的颜色索引的数目  4字节  
 
} BMP;
int line_byte;
unsigned char *imagedata;
extern BMP bmp;
extern int line_byte;
extern unsigned char *imagedata;
#endif
//image_rw.c文件
#include《stdio.h》
#include《stdlib.h》
#include"image.h"
void image_info(FILE *file)
{
int times=3;             //输入文件名次数。
 char bmp_name;       //文件名
 printf("\nplease enter a file name for reading:");
 do 
 {
  if (times《3)
  {
   printf("\nplease enter a file name for reading again:");
  }
  fflush(stdin);
  gets(bmp_name);
  //printf("\n%s",bmp_name);
  file=fopen(bmp_name,"rb+");   //打开一个文件进行读写操作。
  --times;
  if (file==NULL)
  {
   printf("\nerror opening %s for reading! ",bmp_name);
  }
  else
  {
   break;
  }
 }
 while(times!=0);
 if (times==0)
 {
  printf("\nsorry, shutdown!");
  exit(1);
 }
//读取图像信息
    
    fseek(file,0L,0); //读取图像文件类型
    fread(&bmp,sizeof(BMP),1,file);
 printf("\n  bmp  tpye:    %u",bmp.bfType);
 printf("\n  bmp  size:    %u",bmp.bfSize);
 printf("\n  bmp  reserved1:    %u",bmp.bfReserved1);
 printf("\n  bmp  reserved2:    %u",bmp.bfReserved2);
 printf("\n  bmp  offBits:   %u",bmp.bfOffBits);
 printf("\n  bmp  bisize:   %u",bmp.biSize);
 printf("\n  bmp  biWidth:   %d",bmp.biWidth);
 printf("\n  bmp  biHeight:   %d",bmp.biHeight);
 printf("\n  bmp  biplans:   %u",bmp.biPlanes);
 printf("\n  bmp  biBitCount:   %u",bmp.biBitCount);
 printf("\n  bmp  biCompression:   %u",bmp.biCompression);
 printf("\n  bmp  biSizeImage:   %u",bmp.biSizeImage);
 printf("\n  bmp  biXPelsPerMeter:   %d",bmp.biXPelsPerMeter);
 printf("\n  bmp  biYPelsPerMeter:   %d",bmp.biYPelsPerMeter);
 printf("\n  bmp  biClrUsed:   %u",bmp.biClrUsed);
 printf("\n  bmp  biClrImportant:   %u\n",bmp.biClrImportant);
line_byte=(bmp.biWidth*bmp.biBitCount/8+3)/4*4; //获得图像数据每行的数据个数
 //printf("dfsa%u",bmp.line_byte);
   //bmp.imagedata=NULL;
 imagedata=(unsigned char*)malloc(bmp.biSizeImage);
 
 fseek(file,(long)bmp.bfOffBits,0);
 fread(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
 fclose(file);
}
//保存图像
void image_save(FILE *file)
{
 int times=3;             //输入文件名次数。
 char bmp_name;       //文件名
    //int i;          //记录数据区个数
 printf("\nplease enter a file name for writeing:");
 do 
 {
  if (times《3)
  {
   printf("\nplease enter a file name for writeing again:");
  }
  fflush(stdin);
  gets(bmp_name);
  printf("\n%s",bmp_name);
  file=fopen(bmp_name,"wb+");   //打开一个文件进行读写操作。
  --times;
  if (file==NULL)
  {
   printf("\nerror opening %s for writing",bmp_name);
  }
  else
  {
   break;
  }
 }
 while(times!=0);
 if (times==0)
 {
  printf("\nsorry, shutdown!");
  exit(1);
 }
//写文件头
    printf("\n%s",bmp_name);
    fseek(file,0L,0); //图像文件类型
    fwrite(&(bmp.bfType),sizeof(short),1,file);
 printf("\n  bmp  tpye:    %d",bmp.bfType);
    fseek(file,2L,0); //图像文件大小
    fwrite(&(bmp.bfSize),sizeof(int),1,file);
 printf("\n  bmp  size:    %d",bmp.bfSize);
    
 fseek(file,6L,0); //图像文件保留字1
    fwrite(&(bmp.bfReserved1),sizeof(short),1,file);
 printf("\n  bmp  reserved1:    %d",bmp.bfReserved1);
 fseek(file,8L,0); //图像文件保留字2
    fwrite(&(bmp.bfReserved2),sizeof(short),1,file);
 printf("\n  bmp  reserved2:    %d",bmp.bfReserved2);
 fseek(file,10L,0);//数据区的偏移量
    fwrite(&(bmp.bfOffBits),sizeof(short),1,file);
 printf("\n  bmp  offBits:   %d",bmp.bfOffBits);
fseek(file,14L,0);//文件头结构大小
    fwrite(&(bmp.biSize),sizeof(int),1,file);
 printf("\n  bmp  bisize:   %d",bmp.biSize);
fseek(file,18L,0);//图像的宽度
    fwrite(&(bmp.biWidth),sizeof(int),1,file);
 printf("\n  bmp  biWidth:   %d",bmp.biWidth);
 fseek(file,22L,0);//图像的高度
    fwrite(&(bmp.biHeight),sizeof(int),1,file);
 printf("\n  bmp  biHeight:   %d",bmp.biHeight);
fseek(file,24L,0);//图像的面数
    fwrite(&(bmp.biPlanes),sizeof(short),1,file);
 printf("\n  bmp  biplans:   %d",bmp.biPlanes);
 fseek(file,28L,0);//图像一个像素的字节数
    fwrite(&(bmp.biBitCount),sizeof(short),1,file);
 printf("\n  bmp  biBitCount:   %d",bmp.biBitCount);
 fseek(file,30L,0);//图像压缩信息
    fwrite(&(bmp.biCompression),sizeof(short),1,file);
 printf("\n  bmp  biCompression:   %d",bmp.biCompression);
 fseek(file,34L,0);//图像数据区的大小
    fwrite(&(bmp.biSizeImage),sizeof(int),1,file);
 printf("\n  bmp  biSizeImage:   %d",bmp.biSizeImage);
 fseek(file,38L,0);//水平分辨率
    fwrite(&(bmp.biXPelsPerMeter),sizeof(int),1,file);
 printf("\n  bmp  biXPelsPerMeter:   %d",bmp.biXPelsPerMeter);
 fseek(file,42L,0);//垂直分辨率
    fwrite(&(bmp.biYPelsPerMeter),sizeof(int),1,file);
 printf("\n  bmp  biYPelsPerMeter:   %d",bmp.biYPelsPerMeter);
 fseek(file,46L,0);//颜色索引数
    fwrite(&(bmp.biClrUsed),sizeof(int),1,file);
 printf("\n  bmp  biClrUsed:   %d",bmp.biClrUsed);
 fseek(file,50L,0);//重要颜色索引数
    fwrite(&(bmp.biClrImportant),sizeof(int),1,file);
    printf("\n  bmp  biClrImportant:   %d\n",bmp.biClrImportant);
fseek(file,(long)(bmp.bfOffBits),0);
 fwrite(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
 
 fclose(file);
}
//pixProcess.c文件
#include《stdio.h》
#include《stdlib.h》
#include《math.h》
#include"image.h"
//灰度化
void image_gray()
{
 int i,j;
 unsigned char tmp;
 for (i=0;i《bmp.biHeight;i++)
 {
  for (j=0;j《line_byte/3;j++)
  {
   tmp=0.11*(*(imagedata+i*line_byte+j*3+0))+0.59*(*(imagedata+i*line_byte+j*3+1))+0.3*(*(imagedata+i*line_byte+j*3+2));   
      imagedata=tmp;
   imagedata=tmp;
   imagedata=tmp;
   //printf("\nnidsfh%d    %d",i,j);
  }
 }
}
//二值化
  
void image_binarization()
{
 int i,j;
 for (i=0;i《bmp.biHeight;i++)
 {
  for (j=0;j《line_byte;j++)
  {
   if ((*(imagedata+i*line_byte+j))《128)
   {
    imagedata=0;
   }
   else
   {
    imagedata=255;
   }
  }
 }
}
void image_opposite() //反相
{
 int i,j;
 for (i=0;i《bmp.biHeight;i++)
 {
  for (j=0;j《line_byte;j++)
  {
   imagedata);
  }
 }
}
void image_channel()   //抽取RGB通道
{
 int i,j;
 char rgb;
 printf("\nplease enter a char(r/g/b): ");
 fflush(stdin);
 scanf("%c",&rgb);
 if (rgb==’b’)
 {
  for (i=0;i《bmp.biHeight;i++)
  {
      for (j=0;j《line_byte/3;j++)
   {
       imagedata=0;
    imagedata=0;
   }
  }
 }
 else if(rgb==’g’)
 {
  for (i=0;i《bmp.biHeight;i++)
  {
      for (j=0;j《line_byte/3;j++)
   {
       imagedata=0;
    imagedata=0;
   }
  }
 }
 else
 {
  for (i=0;i《bmp.biHeight;i++)
  {
      for (j=0;j《line_byte/3;j++)
   {
       imagedata=0;
    imagedata=0;
   }
  }
 }
}
void image_bright()//改变图像亮度
{
 int level;
 int i,j;
 printf("\n please enter the level of brightness :");
 fflush(stdin);
 scanf("%d",&level);
 for (i=0;i《bmp.biHeight;i++)
 {
  for (j=0;j《line_byte;j++)
  {
   if (level》=0)
   {
    
    if ((imagedata+level)》255)
     imagedata=255;
    else
     imagedata+=level;
   }
   else
   {
    if ((imagedata-abs(level))《0)
     imagedata=0;
    else
     imagedata+=level;
   }
  }
 }
}
//void image_create()  //创建一幅24位BMP图像文件。
//{
//main.c文件
#include《stdio.h》
#include《stdlib.h》
#include《string.h》
#include《conio.h》
#include"image.h"
BMP bmp;
int main()

    FILE *file=NULL;
 int choose;
 char gono;
 do
 {
  image_info(file);  //imagedata已经分配了动态内存,但是没有释放
  printf("\n   1.image_opposite");
  printf("\n   2.image_gray");
  printf("\n   3.image_binarization");
        printf("\n   4.image_channel");
  printf("\n   5.image_brightness");
  //printf("6.image_opposite");
  //printf("7.image_opposite");
        printf("\nchoose your options:");
  fflush(stdin);
  scanf("%d",&choose);
  switch(choose)
  {
   
  case 1:
   image_opposite();
   image_save(file);
   free(imagedata);
   break;
  case 2:
   image_gray();
   image_save(file);
   free(imagedata);
   break;
  case 3:
   image_binarization();
   image_save(file);
   free(imagedata);
   break;
  case 4:
   image_channel();
   image_save(file);
   free(imagedata);
   break;
  case 5:
   image_bright();
   image_save(file);
   free(imagedata);
   break;
  default:
   printf("\n wrong choose!");
   
  }
  printf("\nlet’s go on?(y/n):");
  fflush(stdin);
  scanf("%c",&gono);
  if (gono==’n’)
  {
   printf("\nbye bye!");
   break;
  }
 }
 while(1);
  
 return 0;
}

求标准C语言读写文件的源代码

C语言读写文件 都是三个步骤

1.获取文件描述符

2.对文件读写

3.关闭文件

对文件读操作

//获取文件指针
FILE *pFile = fopen("1.txt","w"); // 文件打开方式 如果原来有内容也会销毁//向文件写数据
fwrite ("hello", //要输入的文字
         1,//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
         strlog("hello"), //单元个数 我们也可以直接写5
         pFile //我们刚刚获得到的地址
         );
//fclose(pFile); //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写
fflush(pFile); //数据刷新 数据立即更新

对文件写操作

FILE *pFile=fopen("1.txt","r"); //获取文件的指针
char *pBuf;  //定义文件指针
fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile); //获取文件长度
pBuf=new char; //定义数组长度
rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,len,pFile); //读文件
pBuf=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
MessageBox(pBuf);  //显示读到的数据
fclose(pFile); // 关闭文件

C语言文件fwrite

#include《stdio.h》

  void main()

  {

   FILE *fp; 

   int a={1,2,3,0,0},i;

      fp=fopen("d2.dat","wb");

      fwrite(a,sizeof(int),5,fp);

      fwrite(a,sizeof(int),5,fp);

      fclose(fp);

      fp=fopen("d2.dat","rb");

      fread(a,sizeof(int),10,fp);

      fclose(fp);

      for(i=0;i《10;i++) 

      printf("%d",a);

   printf("\n");

  }

如果你还想了解更多这方面的信息,记得收藏关注本站。

c语言fwrite源码(【求源码】求一个能把bmp位图读到数组里的C语言源码,网上bmp格式看不懂谢谢)

本文编辑:admin

更多文章:


java代码如何打包(怎样打包JAVA程序)

java代码如何打包(怎样打包JAVA程序)

这篇文章给大家聊聊关于java代码如何打包,以及怎样打包JAVA程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录怎样打包JAVA程序Java项目写完后怎么怎么打包怎么把JAVA写的代码打包成电脑可以直接执行的文件java

2026年3月2日 11:15

firmware upgrade wait image(三星4321ns开机显示firmware upgrade wait image是怎么回事)

firmware upgrade wait image(三星4321ns开机显示firmware upgrade wait image是怎么回事)

“firmware upgrade wait image”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看firmware upgrade wait image(三星4321ns开机显示firmware upgrade wai

2026年3月19日 03:15

tomcat的默认端口(tomcat打开8443端口是怎么回事)

tomcat的默认端口(tomcat打开8443端口是怎么回事)

各位老铁们好,相信很多人对tomcat的默认端口都不是特别的了解,因此呢,今天就来为大家分享下关于tomcat的默认端口以及tomcat打开8443端口是怎么回事的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录t

2026年4月19日 12:15

constantly中文翻译(翻译:When you constantly live your life in Have)

constantly中文翻译(翻译:When you constantly live your life in Have)

各位老铁们,大家好,今天由我来为大家分享constantly中文翻译,以及翻译:When you constantly live your life in Have的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,

2026年8月13日 13:30

javajsch下载图片(JAVA_JSCH如何远程操作SFTP服务器上的文件)

javajsch下载图片(JAVA_JSCH如何远程操作SFTP服务器上的文件)

今天给各位分享JAVA_JSCH如何远程操作SFTP服务器上的文件的知识,其中也会对JAVA_JSCH如何远程操作SFTP服务器上的文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录JAVA_JSCH如何远程

2026年9月23日 03:00

excel教程求和(excel表格怎么求和)

excel教程求和(excel表格怎么求和)

“excel教程求和”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看excel教程求和(excel表格怎么求和)!本文目录excel表格怎么求和excel如何求和excel求和的两种方法excel怎么一列求和 excel一列

2025年11月30日 16:00

schedule的中文意思(schedule什么意思中文)

schedule的中文意思(schedule什么意思中文)

这篇文章给大家聊聊关于schedule的中文意思,以及schedule什么意思中文对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录schedule什么意思中文“schedule”是什么意思schedule是什么意思中文翻译sc

2025年8月7日 04:30

oracle vm virtualbox使用(oracle virtualbox 虚拟机网络)

oracle vm virtualbox使用(oracle virtualbox 虚拟机网络)

大家好,如果您还对oracle vm virtualbox使用不太了解,没有关系,今天就由本站为大家分享oracle vm virtualbox使用的知识,包括oracle virtualbox 虚拟机网络的问题都会给大家分析到,还望可以解

2026年8月12日 12:00

title做动词怎么用(title的动词)

title做动词怎么用(title的动词)

各位老铁们好,相信很多人对title做动词怎么用都不是特别的了解,因此呢,今天就来为大家分享下关于title做动词怎么用以及title的动词的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录title的动词抬头和t

2025年8月14日 10:15

coriander(coriander是什么东西啊怎么翻译)

coriander(coriander是什么东西啊怎么翻译)

大家好,如果您还对coriander不太了解,没有关系,今天就由本站为大家分享coriander的知识,包括coriander是什么东西啊怎么翻译的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录coriander是

2026年2月19日 00:00

idea无法创建springboot项目(如何用idea创建 spring boot工程)

idea无法创建springboot项目(如何用idea创建 spring boot工程)

其实idea无法创建springboot项目的问题并不复杂,但是又很多的朋友都不太了解如何用idea创建 spring boot工程,因此呢,今天小编就来为大家分享idea无法创建springboot项目的一些知识,希望可以帮助到大家,下面

2025年8月8日 17:30

javafx新替代者(JavaFX绑定探究)

javafx新替代者(JavaFX绑定探究)

今天给各位分享JavaFX绑定探究的知识,其中也会对JavaFX绑定探究进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录JavaFX绑定探究Java主要应用领域分别是什么JavaFX绑定探究   数据绑定连接一

2025年7月7日 08:30

response timed out for device(怎么解决Chrome浏览器“Failed to load resource:net:ERR)

response timed out for device(怎么解决Chrome浏览器“Failed to load resource:net:ERR)

大家好,如果您还对response timed out for device不太了解,没有关系,今天就由本站为大家分享response timed out for device的知识,包括怎么解决Chrome浏览器“Failed to lo

2026年2月15日 08:45

whatsoever(whatsoever 这个词是什么意思啊 大家帮忙!)

whatsoever(whatsoever 这个词是什么意思啊 大家帮忙!)

大家好,关于whatsoever很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于whatsoever 这个词是什么意思啊 大家帮忙!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,

2025年7月15日 03:45

数据库误删后能恢复吗(如果数据库的数据被你不小心删了 怎样恢复啊)

数据库误删后能恢复吗(如果数据库的数据被你不小心删了 怎样恢复啊)

这篇文章给大家聊聊关于数据库误删后能恢复吗,以及如果数据库的数据被你不小心删了 怎样恢复啊对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录如果数据库的数据被你不小心删了 怎样恢复啊数据库中数据DELETE了怎样恢复在数据库表中

2025年6月25日 03:45

王业不偏安的下一句王业不偏安的下一句是什么?王业不偏安是什么意思 王业不偏安的原文及翻译

王业不偏安的下一句王业不偏安的下一句是什么?王业不偏安是什么意思 王业不偏安的原文及翻译

本篇文章给大家谈谈王业,以及王业不偏安的下一句王业不偏安的下一句是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录王业不偏安的下一句王业

2026年9月13日 16:45

guard的词根(守护的英文单词怎么写)

guard的词根(守护的英文单词怎么写)

其实guard的词根的问题并不复杂,但是又很多的朋友都不太了解守护的英文单词怎么写,因此呢,今天小编就来为大家分享guard的词根的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录守护的英文单词怎么写怎么用词根解释

2026年8月24日 08:30

mysql去重查询(mysql中如何按条件去重)

mysql去重查询(mysql中如何按条件去重)

今天给各位分享mysql中如何按条件去重的知识,其中也会对mysql中如何按条件去重进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录mysql中如何按条件去重mysql按照时间排序去重查询mysql 对某几个字

2026年9月18日 14:45

表格样式只能应用于什么(请问Office的套用格式是什么)

表格样式只能应用于什么(请问Office的套用格式是什么)

各位老铁们,大家好,今天由我来为大家分享表格样式只能应用于什么,以及请问Office的套用格式是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录

2026年1月19日 13:00

算法导论第三版pdf(《算法导论》第二版和第三版的区别大吗有中文版的吗)

算法导论第三版pdf(《算法导论》第二版和第三版的区别大吗有中文版的吗)

本篇文章给大家谈谈算法导论第三版pdf,以及《算法导论》第二版和第三版的区别大吗有中文版的吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录

2025年8月1日 01:30

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索