zoukankan      html  css  js  c++  java
  • ijg库的使用的几点注意

    ijg库(http://www.ijg.org/)是用于处理jpeg解码和压缩的库,最新版本为2014发布的版本,可以在官网中下载jpegsr9a.zip

    使用vs中个nmake 进行编译,对于这个版本的库,在编译的时候需要注意这几个点:

       1.  可以在cmd中使用命令进行编译(前提是,将 nmake的路径配置到环境变量中path下了)形如:

         设置三个变量:  

         变量名              变量值

        include             D:Program FilesMicrosoft Visual Studio 10.0VCinclude

        lib         D:Program FilesMicrosoft Visual Studio 10.0VClib 

        path                 D:Program FilesMicrosoft Visual Studio 10.0VCin

       设置好这些变量之后,nmake就可以在cmd中使用了.  进入到ijg源码文件夹中,然后运行

    输入    nmake -f   makefile.vc setup-v10   编译,

    (1)一般情况下,这个版本都会出现一个“无法找到文件 win32.mak”,将

    #include<win32.mak>注释掉就可以了(这个注释,!include<win32.mak>)

    (2)再次输入上述的命令,会出现ren jconfig.vc jconfig.h  无法找到 返回0x01的情况

    这时候,新建一个jconfig.h文件,将jconfig.txt中的文件原封不动的移入到这个新建的文件中即可.

    (3)再次运行上述的命令,便可以成功了!

    这样就可以生成windows下的vcproject工程文件了,然后使用vs打开jpeg.pxxxx 即可运行生成静态库jpeg.lib,然后取出文件中的  这几个三个头文件

      jconfig.h, jpeglib.h,jmorecfg.h 和jpeg.lib就可以了.

    #progma comment("lib","jpeg.lib") //使用这条宏引入静态库即可使用:

    下面是一个例子:

      1 #include<Windows.h>
      2 #include <stdio.h>
      3 #include "jpeglib.h"
      4 #include <setjmp.h>
      5 
      6 
      7 //struct  picture{
      8 // JSAMPLE * image_buffer;    /* Points to large array of R,G,B-order data */
      9 // int image_height;    /* Number of rows in image */
     10 // int image_width;        /* Number of columns in image */
     11 // int quality;
     12 // char *destpath;  
     13 //
     14 //};
     15 
     16 JSAMPLE * image_buffer;    /* Points to large array of R,G,B-order data */
     17 int image_height;    /* Number of rows in image */
     18 int image_width;        /* Number of columns in image */
     19 int quality;
     20 char *destpath; 
     21 
     22 struct my_error_mgr {
     23   struct jpeg_error_mgr pub;    /* "public" fields */
     24 
     25   jmp_buf setjmp_buffer;    /* for return to caller */
     26 };
     27 
     28 typedef struct my_error_mgr * my_error_ptr;
     29 
     30 
     31 METHODDEF(void)
     32 my_error_exit (j_common_ptr cinfo)
     33 {
     34   my_error_ptr myerr = (my_error_ptr) cinfo->err;
     35   (*cinfo->err->output_message) (cinfo);
     36   longjmp(myerr->setjmp_buffer, 1);
     37 }
     38 
     39 
     40 GLOBAL(int)
     41 read_JPEG_file (char * filename)
     42 {
     43 
     44   struct jpeg_decompress_struct cinfo;
     45   struct my_error_mgr jerr;
     46   FILE * infile;        /* source file */
     47   JSAMPARRAY buffer;        /* Output row buffer */
     48   int row_stride;        /* physical row width in output buffer */
     49 
     50   if ((infile = fopen(filename, "rb")) == NULL) {
     51     fprintf(stderr, "can't open %s
    ", filename);
     52     return 0;
     53   }
     54   cinfo.err = jpeg_std_error(&jerr.pub);
     55   jerr.pub.error_exit = my_error_exit;
     56   if (setjmp(jerr.setjmp_buffer)) {
     57     jpeg_destroy_decompress(&cinfo);
     58     fclose(infile);
     59     return 0;
     60   }
     61   jpeg_create_decompress(&cinfo);
     62   jpeg_stdio_src(&cinfo, infile);
     63   (void) jpeg_read_header(&cinfo, TRUE);
     64   (void) jpeg_start_decompress(&cinfo);
     65   row_stride = cinfo.output_width * cinfo.output_components;
     66   buffer = (*cinfo.mem->alloc_sarray)
     67         ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
     68 
     69 
     70 
     71   //write
     72   struct jpeg_compress_struct wcinfo;
     73   struct jpeg_error_mgr wjerr;
     74   /* More stuff */
     75   FILE * outfile;        /* target file */
     76   JSAMPROW row_pointer[1];    /* pointer to JSAMPLE row[s] */
     77   int wrow_stride;        /* physical row width in image buffer */
     78 
     79   wcinfo.err = jpeg_std_error(&wjerr);
     80   jpeg_create_compress(&wcinfo);
     81   if ((outfile = fopen(destpath, "wb")) == NULL) {
     82       fprintf(stderr, "can't open %s
    ", destpath);
     83       // exit(1);
     84   }
     85   jpeg_stdio_dest(&wcinfo, outfile);
     86   wcinfo.image_width =   image_width>cinfo.image_width?cinfo.image_image_width;       /* image width and height, in pixels */
     87   wcinfo.image_height = image_height>cinfo.image_height?cinfo.image_height:image_height;
     88   wcinfo.input_components = 3;        /* # of color components per pixel */
     89   wcinfo.in_color_space = JCS_RGB;     /* colorspace of input image */
     90   jpeg_set_defaults(&wcinfo);
     91   jpeg_set_quality(&wcinfo, quality, TRUE /* limit to baseline-JPEG values */);
     92   jpeg_start_compress(&wcinfo, TRUE);
     93   wrow_stride = image_width * 3;    /* JSAMPLEs per row in image_buffer */
     94 
     95 
     96   
     97   int cmod=cinfo.image_height/wcinfo.image_height;
     98 
     99   while (cinfo.output_scanline < cinfo.output_height) {
    100     (void) jpeg_read_scanlines(&cinfo, buffer, 1);
    101     if(cinfo.output_scanline%cmod==0)
    102      (void) jpeg_write_scanlines(&wcinfo,buffer, 1);
    103   }
    104 
    105 
    106   (void) jpeg_finish_decompress(&cinfo);
    107   jpeg_destroy_decompress(&cinfo);
    108   fclose(infile);
    109 
    110 
    111   jpeg_finish_compress(&wcinfo);
    112   jpeg_destroy_compress(&wcinfo);
    113   fclose(outfile);
    114   return 1;
    115 }
    116 
    117 int main(int argc,  char * argd[]){
    118 
    119     destpath="D:\jpeg_123.jpg";
    120     image_height =100;
    121     image_width=128;
    122     quality=100;
    123   read_JPEG_file("D:\123.jpg");
    124  // write_JPEG_file("D:\jpeg_123.jpg",100);
    125   system("pause");
    126  return 0;
    127 }

  • 相关阅读:
    iOS开发——Xcode快捷键
    iOS开发——国际化支持Localizable.strings
    SQL 函数
    常用窗体表单布局
    Extjs grid combo
    怎么完全卸载sql2005?
    ExtJS文件上传
    ExtJS视频学习笔记
    ExtJS问题集——Menu的show()和showBy()函数是什么意思
    C# DataGridView操作
  • 原文地址:https://www.cnblogs.com/gongxijun/p/5046648.html
Copyright © 2011-2022 走看看