c語言讀入圖片
『壹』 請問如何使用純c語言讀取文件中的圖片,並將圖片存儲在二維數組中
1、使用雙層循環語句,就可以依次把數據順序讀入到一個二維數組當中了。2、常式:#include#include#defineMAXLINE3#defineMAXCOLUMN10voidmain(void){FILE*fp;//文件指針chararr[MAXLINE][MAXCOLUMN]={0};//定義3行10列的二維數組並初始化inti=-1;if((fp=fopen("./test/filename.txt","r"))==NULL){//打開txt文件perror("Fileopenerror!\n");return;}while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL)//讀取一行並存到arr數組printf("%d:",i);//列印行號//puts(arr[i]);char*subarr=strtok(arr[i],"");//以空格為分隔符從arr[i]中獲得字串while(subarr!=NULL){data[i][j]=atoi(subarr);//將字串轉為int型數據存入data數組printf("%d\t",data[i][j]);//列印data[i][jsubarr=strtok(NULL,"");//繼續獲得arr[i]中的字串j++;//data數組列加一}printf("\n");}//循環完畢後,所有數據已在data數組中printf("\n");fclose(fp);//關閉指針}
『貳』 如何用c語言讀取圖片
#include
using namespace std;
#define Twoto1(i,j,w) i*w+j
void createimage(unsigned char *&img, int w, int h)
{img = new unsigned char[w*h];}
void delateimage(unsigned char*img)
{delete []img;}
void readimage(unsigned char*img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp,fname, "rb");
if (fp == NULL){ cout << "error" << endl; return; }
size_t result;
result=fread(img , sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Reading error" << endl;
return;
}
else
cout << "Reading Ok!" << endl;
fclose(fp);
}
void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])
{
for (int i = 0; i for (int j = 0; j if (iw - 3 || j>h - 3)
image1[Twoto1(i,j,w)] = 0;
else
{
float temp = 0;
for (int m = 0; m<5; m++)
for (int n = 0; n<5; n++)
{
temp += (image[Twoto1(i-2+m,j-2+n,w)] moban[m][n]);
}
if (temp>255) image1[Twoto1(i, j, w)] = 255;
else if (temp<0) image1[Twoto1(i, j, w)] = 0;
else image1[Twoto1(i, j, w)] = temp;
}
}
void saveimage(unsigned char *img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp, fname, "wb");
if (fp == NULL) { cout << "error" << endl; return; }
size_t result;
result = fwrite(img, sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Write error" << endl;
return;
}
else
cout << "Write Ok!" << endl;
fclose(fp);
}
void main()
{
unsigned char *img;
unsigned char *img1;
float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } };
//float moban[5][5] = { 0 };
int w = 512, h = 512;
createimage(img, w, h);
createimage(img1, w, h);
readimage(img, w, h, "E:ss.raw");
mobanjuanji(img, img1,w, h, moban);
saveimage(img, w, h, "E:ss_1.raw");
saveimage(img1, w, h, "E:ss_2.raw");
delateimage(img);
delateimage(img1);
}

(2)c語言讀入圖片擴展閱讀
C語言實現一個圖片的讀出和寫入
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//獲取文件名為filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打開文件。
int size;
if(fp == NULL) // 打開文件失敗
return -1;
fseek(fp, 0, SEEK_END);//定位文件指針到文件尾。
size=ftell(fp);//獲取文件指針偏移量,即文件大小。
fclose(fp);//關閉文件。
return size;
}
int main ()
{
int size=0;
size=file_size("qw");
printf("%d ",size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen("qw","r");
pFile = fopen ( "qwe" , "wb" );
printf("%d==
",pFile);
printf("%d ",size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename("qwe","Groot.jpg");
return 0;
}
『叄』 如何使用C語言實現JPEG圖像格式的讀取與寫入
1.圖片也是屬於文件類型的一種,圖片屬於二進制文件。使用fopen函數的二進制模式「rb」就可以打開。
2.常式:
#include<stdlib.h>
#include<stdio.h>
intmain()
{
FILE*fpPhoto,*fpText,*fpTarget;
intiRead;
charszBuf[100];
printf("請輸入第一個文件名(bmp): ");
gets(szBuf);
fpPhoto=fopen(szBuf,"rb");
printf("請輸入第二個文件名(txt): ");
gets(szBuf);
fpText=fopen(szBuf,"rb");
printf("請輸入目的文件名(bmp): ");
gets(szBuf);
fpTarget=fopen(szBuf,"wb");
if(!fpPhoto||!fpText||!fpTarget)
{
printf("打開文件失敗! ");
system("pause");
return-1;
}
while((iRead=fread(szBuf,1,sizeof(szBuf),fpPhoto))>0)
fwrite(szBuf,1,iRead,fpTarget);
while((iRead=fread(szBuf,1,sizeof(szBuf),fpText))>0)
fwrite(szBuf,1,iRead,fpTarget);
fclose(fpPhoto);
fclose(fpText);
fclose(fpTarget);
return0;
}
『肆』 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[10];       //文件名
 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[10];       //文件名
    //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[i*line_byte+j*3+0]=tmp;
   imagedata[i*line_byte+j*3+1]=tmp;
   imagedata[i*line_byte+j*3+2]=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[i*line_byte+j]=0;
   }
   else
   {
    imagedata[i*line_byte+j]=255;
   }
  }
 }
}
void image_opposite() //反相
{
 int i,j;
 for (i=0;i<bmp.biHeight;i++)
 {
  for (j=0;j<line_byte;j++)
  {
   imagedata[i*line_byte+j]=abs(255-imagedata[i*line_byte+j]);
  }
 }
}
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[i*line_byte+3*j+1]=0;
    imagedata[i*line_byte+3*j+2]=0;
   }
  }
 }
 else if(rgb=='g')
 {
  for (i=0;i<bmp.biHeight;i++)
  {
      for (j=0;j<line_byte/3;j++)
   {
       imagedata[i*line_byte+3*j]=0;
    imagedata[i*line_byte+3*j+2]=0;
   }
  }
 }
 else
 {
  for (i=0;i<bmp.biHeight;i++)
  {
      for (j=0;j<line_byte/3;j++)
   {
       imagedata[i*line_byte+3*j]=0;
    imagedata[i*line_byte+3*j+1]=0;
   }
  }
 }
}
void image_bright()//改變圖像亮度
{
 int level;
 int i,j;
 printf("\n please enter the level of brightness[-255 to 255] :");
 fflush(stdin);
 scanf("%d",&level);
 for (i=0;i<bmp.biHeight;i++)
 {
  for (j=0;j<line_byte;j++)
  {
   if (level>=0)
   {
    
    if ((imagedata[i*line_byte+j]+level)>255)
     imagedata[i*line_byte+j]=255;
    else
     imagedata[i*line_byte+j]+=level;
   }
   else
   {
    if ((imagedata[i*line_byte+j]-abs(level))<0)
     imagedata[i*line_byte+j]=0;
    else
     imagedata[i*line_byte+j]+=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語言打開圖像文件後運用以下代碼就可以讀取像素,具體如下:
#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[10];       //文件名
 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[10];       //文件名
    //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[i*line_byte+j*3+0]=tmp;
   imagedata[i*line_byte+j*3+1]=tmp;
   imagedata[i*line_byte+j*3+2]=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[i*line_byte+j]=0;
   }
   else
   {
    imagedata[i*line_byte+j]=255;
   }
  }
 }
}
void image_opposite() //反相
{
 int i,j;
 for (i=0;i<bmp.biHeight;i++)
 {
  for (j=0;j<line_byte;j++)
  {
   imagedata[i*line_byte+j]=abs(255-imagedata[i*line_byte+j]);
  }
 }
}
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[i*line_byte+3*j+1]=0;
    imagedata[i*line_byte+3*j+2]=0;
   }
  }
 }
 else if(rgb=='g')
 {
  for (i=0;i<bmp.biHeight;i++)
  {
      for (j=0;j<line_byte/3;j++)
   {
       imagedata[i*line_byte+3*j]=0;
    imagedata[i*line_byte+3*j+2]=0;
   }
  }
 }
 else
 {
  for (i=0;i<bmp.biHeight;i++)
  {
      for (j=0;j<line_byte/3;j++)
   {
       imagedata[i*line_byte+3*j]=0;
    imagedata[i*line_byte+3*j+1]=0;
   }
  }
 }
}
void image_bright()//改變圖像亮度
{
 int level;
 int i,j;
 printf("\n please enter the level of brightness[-255 to 255] :");
 fflush(stdin);
 scanf("%d",&level);
 for (i=0;i<bmp.biHeight;i++)
 {
  for (j=0;j<line_byte;j++)
  {
   if (level>=0)
   {
    
    if ((imagedata[i*line_byte+j]+level)>255)
     imagedata[i*line_byte+j]=255;
    else
     imagedata[i*line_byte+j]+=level;
   }
   else
   {
    if ((imagedata[i*line_byte+j]-abs(level))<0)
     imagedata[i*line_byte+j]=0;
    else
     imagedata[i*line_byte+j]+=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語言如何讀取和保存jpg圖片文件
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//獲取文件名為filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打開文件。
int size;
if(fp == NULL) // 打開文件失敗
return -1;
fseek(fp, 0, SEEK_END);//定位文件指針到文件尾。
size=ftell(fp);//獲取文件指針偏移量,即文件大小。
fclose(fp);//關閉文件。
return size;
}
int main ()
{
int size=0;
size=file_size("qw");
printf("%d ",size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen("qw","r");
pFile = fopen ( "qwe" , "wb" );
printf("%d== ",pFile);
printf("%d ",size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename("qwe","Groot.jpg");
return 0;
}

(6)c語言讀入圖片擴展閱讀:
c語言讀取TXT文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf[MAX_LINE]; /*緩沖區*/
FILE *fp; /*文件指針*/
int len; /*行字元個數*/
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
len = strlen(buf);
buf[len-1] = '
