ijg库的使用的几点注意
ijg库(http://www.ijg.org/)是用于处理jpeg解码和压缩的库,最新版本为2014发布的版本,可以在官网中下载jpegsr9a.zip
使用vs中个nmake 进行编译,对于这个版本的库,在编译的时候需要注意这几个点:
1. 可以在cmd中使用命令进行编译(前提是,将 nmake的路径配置到环境变量中path下了)形如:
设置三个变量:
变量名 变量值
include D:\Program Files\Microsoft Visual Studio 10.0\VC\include\
lib D:\Program Files\Microsoft Visual Studio 10.0\VC\lib\
path D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\

设置好这些变量之后,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") //使用这条宏引入静态库即可使用:
下面是一个例子:
#include<Windows.h>
#include <stdio.h>
#include "jpeglib.h"
#include <setjmp.h> //struct picture{
// JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */
// int image_height; /* Number of rows in image */
// int image_width; /* Number of columns in image */
// int quality;
// char *destpath;
//
//}; JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */
int image_height; /* Number of rows in image */
int image_width; /* Number of columns in image */
int quality;
char *destpath; struct my_error_mgr {
struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */
}; typedef struct my_error_mgr * my_error_ptr; METHODDEF(void)
my_error_exit (j_common_ptr cinfo)
{
my_error_ptr myerr = (my_error_ptr) cinfo->err;
(*cinfo->err->output_message) (cinfo);
longjmp(myerr->setjmp_buffer, );
} GLOBAL(int)
read_JPEG_file (char * filename)
{ struct jpeg_decompress_struct cinfo;
struct my_error_mgr jerr;
FILE * infile; /* source file */
JSAMPARRAY buffer; /* Output row buffer */
int row_stride; /* physical row width in output buffer */ if ((infile = fopen(filename, "rb")) == NULL) {
fprintf(stderr, "can't open %s\n", filename);
return ;
}
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = my_error_exit;
if (setjmp(jerr.setjmp_buffer)) {
jpeg_destroy_decompress(&cinfo);
fclose(infile);
return ;
}
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, infile);
(void) jpeg_read_header(&cinfo, TRUE);
(void) jpeg_start_decompress(&cinfo);
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, ); //write
struct jpeg_compress_struct wcinfo;
struct jpeg_error_mgr wjerr;
/* More stuff */
FILE * outfile; /* target file */
JSAMPROW row_pointer[]; /* pointer to JSAMPLE row[s] */
int wrow_stride; /* physical row width in image buffer */ wcinfo.err = jpeg_std_error(&wjerr);
jpeg_create_compress(&wcinfo);
if ((outfile = fopen(destpath, "wb")) == NULL) {
fprintf(stderr, "can't open %s\n", destpath);
// exit(1);
}
jpeg_stdio_dest(&wcinfo, outfile);
wcinfo.image_width = image_width>cinfo.image_width?cinfo.image_width:image_width; /* image width and height, in pixels */
wcinfo.image_height = image_height>cinfo.image_height?cinfo.image_height:image_height;
wcinfo.input_components = ; /* # of color components per pixel */
wcinfo.in_color_space = JCS_RGB; /* colorspace of input image */
jpeg_set_defaults(&wcinfo);
jpeg_set_quality(&wcinfo, quality, TRUE /* limit to baseline-JPEG values */);
jpeg_start_compress(&wcinfo, TRUE);
wrow_stride = image_width * ; /* JSAMPLEs per row in image_buffer */ int cmod=cinfo.image_height/wcinfo.image_height; while (cinfo.output_scanline < cinfo.output_height) {
(void) jpeg_read_scanlines(&cinfo, buffer, );
if(cinfo.output_scanline%cmod==)
(void) jpeg_write_scanlines(&wcinfo,buffer, );
} (void) jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(infile); jpeg_finish_compress(&wcinfo);
jpeg_destroy_compress(&wcinfo);
fclose(outfile);
return ;
} int main(int argc, char * argd[]){ destpath="D:\\jpeg_123.jpg";
image_height =;
image_width=;
quality=;
read_JPEG_file("D:\\123.jpg");
// write_JPEG_file("D:\\jpeg_123.jpg",100);
system("pause");
return ;
}

ijg库的使用的几点注意的更多相关文章
- ijg库解码超大型jpeg图片
1. ijg库解码超大型jpeg图片(>100M)的时候,如何避免内存溢出. 采用边解码边压缩的策略,每次解码一行或者若干行图片数据,然后对于这些解码的数据,进行DQT(量化处理,过滤掉高频的数 ...
- USB Video Class及其实现
1 Video Class 基础概念Usb协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容.这些Class ...
- vs2015下编译免费开源的jpeg库,ijg的jpeg.lib
vs2015下编译免费开源的jpeg库,ijg的jpeg.lib 1. 去Independent JPEG Group官网www.ijg.org下载jpegsrc,我下载的版本是jpegsrc9c.z ...
- 编译 ijg JPEG V8 库 GIF 库
libjpeg-turbo-1.2.1太老了,不支持,从内存解压,这里编译支持 jpeg_mem_src 的 JPEG V9 wget http://www.ijg.org/files/jpegsrc ...
- jpeg库编译 - windows平台
一.准备: 下载最新的jpeg库源码:http://www.ijg.org/files/jpegsr9a.zip二.编译 1. 解压到指定目录 2. 打开VS2010命令行窗口(为了得到VS2010的 ...
- 烂泥:centos单独编译安装gd库
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...
- phpize 扩展GD库 安装 ! 环境--centos 7 +nginx 1.7.11+php 5.6.7
使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR ...
- linux下编译qt5.6.0静态库——configure配置
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- 编译libjpeg库
最近在写车牌识别软件,需要用到BMP转成JPG的功能,自然就想到借助libjpeg来实现 OS: win7 64位 编译器: VS2008 1. 下载源代码下载地址:http://www.ijg.or ...
随机推荐
- Gulp入门教程(转载)
本人转载自: Gulp入门教程
- struts 数据验证
1. validate()验证 将对页面表单验证的内容写到validate()方法中,实现验证和业务处理内容的分离 在Action中添加 validate()方法 public void vali ...
- C语言回顾-函数和位运算
1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...
- DOM解析
1.xml可扩展标记语言(Extensible Makeup Language) 最简单的声明语法: <?xml version="1.0" ?> 用encoding属 ...
- windows平台(不包括ARM的CE)通用的压缩和解压缩
通用是相对的,这里指的是xp和win7(其他版本我没测试过,不要用不要来找我) #define CMP_FRM COMPRESSION_FORMAT_LZNT1|COMPRESSION_ENGINE_ ...
- fgets函数
打开文件 fopen("需要打开的路径") 然后使用fgets函数读取行 #include <stdio.h> #include <stdlib.h> #i ...
- mac上安装Navicat Premium 破解版+汉化包
Navicat是一款非常强大的sql分析管理工具.以前一直在windows上面使用. 由于工作的需要,我也是折腾出了这不易的mac破解版.下了好多网上的版本,亲测这个可用. 俗话说:工欲善其事,必先利 ...
- JAVA设计模式——单例模式
单例模式的定义: Ensure a class has only one instance, and provide a global point of access to it.( 确保某一个类只有 ...
- NaN
not a number 全称, 任何数/0 js会出现NaN alert(NaN==NaN); // false isNaN(NaN); // true alert(isNaN(10)); // f ...
- gulp watch error ENOSPC
in linux you fix this with the command:echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sy ...