现在的位置: 首页 > 综合 > 正文

libjpeg 的使用sample RGB转换到JPEG

2018年05月28日 ⁄ 综合 ⁄ 共 1430字 ⁄ 字号 评论关闭

想在程序中用到JPEG的图片保存,所以花了点时间。一开始在网上找资源,发现现成的还不好找,所以,贴出来共享!

首先到网上找相应的库文件,这个大家到网上Google一下就可以了

示例代码如下:

  1. extern "C"
  2. #include "jpeglib/jpeglib.h"
  3. }
  4. int _tmain(int argc, _TCHAR* argv[])
  5. {
  6.     //定义一个压缩对象,这个对象用于处理主要的功能
  7.     jpeg_compress_struct jpeg;
  8.     //用于错误信息
  9.     jpeg_error_mgr jerr;
  10.     //错误输出在绑定
  11.     jpeg.err = jpeg_std_error(&jerr);
  12.     
  13.     //初始化压缩对象
  14.     jpeg_create_compress(&jpeg);
  15.     //定义压缩后的输出,这里输出到一个文件!
  16.     FILE* pFile = fopen( "c://tt.jpeg","wb" );
  17.     if( !pFile )
  18.         return 0;
  19.     //绑定输出
  20.     jpeg_stdio_dest(&jpeg, pFile);
  21.     //压缩参数设置。具体请到网上找相应的文档吧,参数很多,这里只设置主要的。
  22.     //我设置为一个 24 位的 512 X 512大小的RGB图片
  23.     jpeg.image_width = 512;
  24.     jpeg.image_height = 512;
  25.     jpeg.input_components  = 3;
  26.     jpeg.in_color_space = JCS_RGB;
  27.     //其它参数设置为默认的!
  28.     jpeg_set_defaults(&jpeg);
  29.     //开始压缩。执行这一行数据后,无法再设置参数了!
  30.     jpeg_start_compress(&jpeg, TRUE);
  31.     //定义一个数组,代表图片每一行的数据。3 代表 jpeg.input_components
  32.     unsigned char oneRowImgData[ 512 * 3 ];
  33.     forint i=0;i<512*3;++i )
  34.         oneRowImgData[i] = 0;
  35.      
  36.     JSAMPROW row_pointer[1];
  37.     row_pointer[0] = oneRowImgData;
  38.     //从上到下,设置图片中每一行的像素值
  39.     forint i=0;i<jpeg.image_height;++i )
  40.     {
  41.         oneRowImgData[ i ] = i%256;//随便给一个值
  42.         //将一行数据写入!
  43.         jpeg_write_scanlines( &jpeg,row_pointer,1 );
  44.     }
  45.     //结束压缩
  46.     jpeg_finish_compress(&jpeg);
  47.     //清空对象
  48.     jpeg_destroy_compress(&jpeg);
  49.     
  50.     fclose( pFile ); pFile = NULL;
  51.     return 0;
  52. }

最后生成的图下如上

另一个参考文章:

http://ou800doc.caldera.com/en/jpeg/libjpeg.txt

抱歉!评论已关闭.