原创 C语言读写Jpg图片

2011-5-30 11:16 11068 10 15 分类: MCU/ 嵌入式

jpg图片的起始为FF D8,结束为FF D9。没细研究。

 


#include "stdio.h"
/***********************************************************************************
* fp:  源图片,jpg->bin数据
 out: 输出图片的Ascii码
 dstFile:最终生成的图片 bin数据->jpg
***********************************************************************************/
int main()
{
 FILE *fp, *out,*dstFile;
 long int size;
 unsigned char ch,ch1,ch2;
 unsigned char high,low;
 long int i;
 char pic_name[30];
 for(i=0; i<30; i++)
 {
  pic_name = 0;
 }
 printf("\nPlease input the picture's name(such as vc.jpg)...\n");
 scanf("%s", pic_name);
 if((fp = fopen(pic_name, "rb")) == NULL)
 {
  printf("can't open the file\n");
  return 0;
 }
 if((out = fopen("JpgToBin.txt", "wb+")) == NULL)
 {
  printf("can't open the txt file\n");
  return 0;
 }
 if ((dstFile = fopen("Recv.jpg","wb+")) == NULL)
 {
  printf("can't open the dst file\n");
  return 0;
 }
 fseek(fp,0,SEEK_END);
 size = ftell(fp);
 printf("size is %d\n", size);
 rewind(fp);
 for (i=0; i<size; i++)
 {
  ch = fgetc(fp);
  high = ch >> 4;
  low = ch & 0x0f;
  if (high < 10)
   high += '0';
  else
   high += 55;
  if (low < 10)
   low += '0';
  else
   low += 55;
  fputc(high,out);  
  fputc(low, out);
  fputc(' ',out);
  if(i%16 == 0)
   fprintf(out,"\r\n");
 }

 rewind(fp);
 bool FormatRight = false;
 for(i=0; i<size; i++)
 {
  ch1 = fgetc(fp);
  if (ch1 == 0xff)
  {
   ch2 = fgetc(fp);
   if (ch2 == 0xd8)
   {
    fputc(ch1,dstFile);
    fputc(ch2,dstFile);
    FormatRight = true;
    break;
   }
  }
 }
 if (FormatRight)
 {
  for(; i<size; i++)
  {
   ch1 = fgetc(fp);
   fputc(ch1,dstFile);
   if (ch1 == 0xff)
   {
    ch2 = fgetc(fp);
    if (ch2 == 0xd9)
     break;
    else
     fputc(ch2,dstFile);
   }
  }
 }
 
 fclose(fp);
 fclose(out);
 fclose(dstFile);
 printf("\n***********************************************************\n");
 printf("Success!");
 printf("\n***********************************************************\n");

 return 0;
}

文章评论5条评论)

登录后参与讨论

用户1834065 2015-4-5 08:38

您好,感谢分享,学习到了,但是怎样把txt文件变回jpg文件没看懂,希望能得到您的帮助!!

用户377235 2013-10-15 18:03

谢谢啦

用户377235 2013-8-5 21:39

請問這個程式有什麼用?JpgToBin.txt和Recv.jpg是做什麼用的? 程式結束完只有告訴我檔案的大小啊

wangxinfeng6666_749290079 2011-5-30 14:55

学习,路过

xucun915_925777961 2011-5-30 13:07

路过,学习一下^_^
相关推荐阅读
用户1409644 2011-04-19 16:15
C语言创建文件夹和文件
CreateDirectory("C:\\tmp\\mark1.dat",NULL); //创建文件夹 fp = fopen("C:\\tmp\\mark1.txt","w+");  //创建文件...
用户1409644 2011-04-07 14:42
交换两数,不使用第三变量
看到了,觉得很有意思,转一下 转自http://blog.csdn.net/bookish_2010_prj/archive/2010/04/23/5519869.aspx   void ExChan...
用户1409644 2011-03-22 16:26
树状数据检索的C语言实现
#define  GATE_SIZE   1    //门牌号 2^0#define  UNIT_SIZE   256    //单元号 2^8#define  BUILD_SIZE   65526 ...
用户1409644 2011-03-17 08:32
编写类String
编写类String 的构造函数、析构函数和赋值函数,已知类 String 的原型为: class String  {    public:     String(const char *str = N...
用户1409644 2011-03-12 10:15
wavecom GR64 Q64模块的联网步骤
Q64是GR64的替代更新产品。wavecom的技术支持跟我交待说是完全兼容,可就实际效果来看,引脚略有不同,软件联网流程也略有不同。现在项目结束了,大体总结一下。硬件:Q64的RTS脚,必须拉低!否...
我要评论
5
10
关闭 站长推荐上一条 /2 下一条