libjpeg-turbo 的安装和简单使用

大家好,这篇文中介绍了libjpeg-turbo的简单使用,大部分是copy,有一点自己的心得

libjpeg是一款开源的jpeg压缩解压库,具体信息参见百度百科。libjpeg-turbo是它的升级版,性能有所 提升,源码去他的官网可以下载  https://libjpeg-turbo.org/  我用的1.2.1 最新的已经到2.0 

对于libjpeg-turbo的使用官方有详细的说明文档 :

/ ******************** JPEG DECOMPRESSION样本界面******************* /

/ *这个例子的这一半显示了如何从JPEG解压缩器读取数据。
 *这比上面更精致一点,因为我们显示:
 *(a)如何修改JPEG库的标准错误报告行为;
 *(b)如何使用库的内存管理器分配工作区。
 *
 *为了使这个例子与第一个例子有点不同,我们会
 *假设我们不打算将整个图像放入内存中
 *缓冲区,但要将其逐行发送到其他地方。我们需要一个单一的,
 * scanline-high JSAMPLE数组作为工作缓冲区,我们将让JPEG
 内存管理器为我们分配它。这种方法实际上非常有用
 *因为我们不需要记住单独释放缓冲区:它
 *清除JPEG对象时将自动消失。
 * /


/ *
 *错误处理:
 *
 * JPEG库的标准错误处理程序(jerror.c)分为
 *几个“方法”,你可以单独重写。这可以让你
 *调整行为而不重复大量的代码,你可能会这样做
 *必须更新每个未来版本。
 *
 *我们的例子展示了如何覆盖“error_exit”方法
 *发生致命错误时,控制权返回给库的调用者,
 *而不是像标准error_exit方法那样调用exit()。
 *
 *我们使用C的setjmp / longjmp工具来返回控制。这意味着
 *调用JPEG库的例程必须先执行setjmp()调用
 *建立返回点。我们想要更换error_exit来做一个
 * longjmp()。但是我们需要让setjmp缓冲区可以访问
 * error_exit例程。要做到这一点,我们做一个私人的延伸
 *标准的JPEG错误处理程序对象。(如果我们使用C ++,我们会说我们
 *正在制作常规错误处理程序的子类。)
 *
 *这是扩展的错误处理程序结构:
 * /

struct my_error_mgr {
  struct jpeg_error_mgr pub; / *“公共”字段* /

  jmp_buf setjmp_buffer; / *返回给调用者* /
};

typedef struct my_error_mgr * my_error_ptr;

/ *
 *以下是将替换标准error_exit方法的例程:
 * /

METHODDEF(无效)
my_error_exit(j_common_ptr cinfo)
{
  / * cinfo-> err真的指向一个my_error_mgr结构,所以强制指针* /
  my_error_ptr myerr =(my_error_ptr)cinfo-> err;

  / *总是显示消息。* /
  / *如果我们选择了,我们可以推迟到返回之后。* /
  (* cinfo-> err-> output_message)(cinfo);

  / *将控制权返回给setjmp点* /
  longjmp(myerr-> setjmp_buffer,1);
}


/ *
 * JPEG解压缩的示例程序。我们假设源文件名
 *传入。我们希望成功返回1,错误时return 0。
 * /


GLOBAL(INT)
read_JPEG_file(char * filename)
{
  / *此结构包含JPEG解压缩参数和指针
   *工作空间(根据JPEG库的需要分配)。
   * /
  struct jpeg_decompress_struct cinfo;
  / *我们使用我们的专用扩展名JPEG错误处理程序。
   *注意,这个结构必须和主要的JPEG参数一样长
   * struct,以避免悬挂指针问题。
   * /
  struct my_error_mgr jerr;
  /* 更多东西 */
  文件* infile; /* 源文件 */
  JSAMPARRAY缓冲区; / *输出行缓冲区* /
  int row_stride; / *输出缓冲区中的物理行宽度* /

  / *在这个例子中,我们希望在做其他事情之前打开输入文件,
   *以便下面的setjmp()错误恢复可以假定文件已打开。
   *非常重要:如果你在一台机器上,使用“b”选项来打开()
   *需要它来读取二进制文件。
   * /

  if((infile = fopen(filename,“rb”))== NULL){
    fprintf(stderr&#x
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值