想在程序中用到JPEG的图片保存,所以花了点时间。一开始在网上找资源,发现现成的还不好找,所以,贴出来共享!
首先到网上找相应的库文件,这个大家到网上Google一下就可以了
示例代码如下:
- extern "C"{
- #include "jpeglib/jpeglib.h"
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- //定义一个压缩对象,这个对象用于处理主要的功能
- jpeg_compress_struct jpeg;
- //用于错误信息
- jpeg_error_mgr jerr;
- //错误输出在绑定
- jpeg.err = jpeg_std_error(&jerr);
- //初始化压缩对象
- jpeg_create_compress(&jpeg);
- //定义压缩后的输出,这里输出到一个文件!
- FILE* pFile = fopen( "c://tt.jpeg","wb" );
- if( !pFile )
- return 0;
- //绑定输出
- jpeg_stdio_dest(&jpeg, pFile);
- //压缩参数设置。具体请到网上找相应的文档吧,参数很多,这里只设置主要的。
- //我设置为一个 24 位的 512 X 512大小的RGB图片
- jpeg.image_width = 512;
- jpeg.image_height = 512;
- jpeg.input_components = 3;
- jpeg.in_color_space = JCS_RGB;
- //其它参数设置为默认的!
- jpeg_set_defaults(&jpeg);
- //开始压缩。执行这一行数据后,无法再设置参数了!
- jpeg_start_compress(&jpeg, TRUE);
- //定义一个数组,代表图片每一行的数据。3 代表 jpeg.input_components
- unsigned char oneRowImgData[ 512 * 3 ];
- for( int i=0;i<512*3;++i )
- oneRowImgData[i] = 0;
- JSAMPROW row_pointer[1];
- row_pointer[0] = oneRowImgData;
- //从上到下,设置图片中每一行的像素值
- for( int i=0;i<jpeg.image_height;++i )
- {
- oneRowImgData[ i ] = i%256;//随便给一个值
- //将一行数据写入!
- jpeg_write_scanlines( &jpeg,row_pointer,1 );
- }
- //结束压缩
- jpeg_finish_compress(&jpeg);
- //清空对象
- jpeg_destroy_compress(&jpeg);
- fclose( pFile ); pFile = NULL;
- return 0;
- }
最后生成的图下如上
另一个参考文章:
http://ou800doc.caldera.com/en/jpeg/libjpeg.txt