Chinaunix首页 | 论坛 | 博客
  • 博客访问: 115587
  • 博文数量: 29
  • 博客积分: 826
  • 博客等级: 上士
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-11 08:30
文章分类
文章存档

2012年(29)

我的朋友

分类: LINUX

2012-07-03 11:23:43

#include
#include
#include
#include
#include
#include
char * jpgFileName = "test.jpg";
char * FileName = "output.jpeg";
int main()
{
 FILE* f1=NULL;
  FILE* f2=NULL;
  unsigned char * RGB_Ptr = NULL;
 int width,height;
  char *DataBuffer=NULL;
 struct jpeg_decompress_struct cinfo;
 struct jpeg_error_mgr jerr;
 cinfo.err=jpeg_std_error(&jerr);
 jpeg_create_decompress(&cinfo);
 if((f1=fopen(jpgFileName,"rb"))==NULL)
 {
  printf("can not find file\n");
  return 0;
 }
 jpeg_stdio_src(&cinfo,f1);
 jpeg_read_header(&cinfo,1);
 {
  width=cinfo.image_width;
  height=cinfo.image_height;
  if(cinfo.num_components!=3)
  {
   printf("the coular number is zero\n");
   return 0;
  }
  printf("Width:%d;Height:%d;Components:%d\n",width,height,cinfo.num_components);
 }
 unsigned char *lineData =NULL;
  JSAMPARRAY buffer;
  jpeg_start_decompress(&cinfo);
  DataBuffer=malloc(width*height*3);
  lineData=malloc(width*3);
  buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,(width*3),1);
  while(cinfo.output_scanline < cinfo.output_height)
  {
   int j=0;
   jpeg_read_scanlines(&cinfo,buffer,1);
   for(j=0;j<(width*3);j++)
   {
    DataBuffer[(height-cinfo.output_scanline)*(width*3)+j] = buffer[0][j+2]; //R
   j++;
   DataBuffer[(height-cinfo.output_scanline)*(width*3)+j] = buffer[0][j]; //G
   j++;
   DataBuffer[(height-cinfo.output_scanline)*(width*3)+j] = buffer[0][j-2]; //B
  }
 }
 jpeg_finish_decompress(&cinfo);
 jpeg_destroy_decompress(&cinfo);
 
 struct jpeg_compress_struct jcs;
  struct jpeg_error_mgr jem;
  jcs.err=jpeg_std_error(&jem);
  jpeg_create_compress(&jcs);
 f2=fopen(FileName,"wb");
 jpeg_stdio_dest(&jcs,f2);
 printf("Width:%d;Height:%d;Components:%d\n",width,height,cinfo.num_components);
 RGB_Ptr=malloc(width*height*3+1);
 strcpy(RGB_Ptr,DataBuffer);
 jcs.image_width=width;
 jcs.image_height=height;
 jcs.input_components=3;
 jcs.in_color_space=JCS_RGB;
 jpeg_set_defaults(&jcs);
 jpeg_set_quality(&jcs,80,1);
 jpeg_start_compress(&jcs,1);
 {
  int i=0;
  long rgb_index=height*width*3-1;
  JSAMPROW *row_pointer;
  rgb_index=0;
  row_pointer=malloc(height*width*3);
  for(i=0;i  {
   int j=0;
   unsigned char *lineData=NULL;
   lineData =malloc(width*3);
   for(j=0;j   {
    lineData[j*3+2]=RGB_Ptr[rgb_index];
    rgb_index++; 
    lineData[j*3+1]=RGB_Ptr[rgb_index];
    rgb_index++;
    lineData[j*3+0]=RGB_Ptr[rgb_index];
    rgb_index++;
   }
   row_pointer[height-i-1]=lineData; 
  }
  jpeg_write_scanlines(&jcs,row_pointer,height); 
 }
 jpeg_finish_compress(&jcs);
 jpeg_destroy_compress(&jcs);
 fclose(f1);
 return 0;
}
阅读(1495) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~