一、libjpeg-turbo库下载

libjpeg-turbo是libjpeg的升级版,性能有所提升

libpng库链接:https://libpng.sourceforge.io/index.html

二、ubuntu上验证libjpeg-turbo

  1. 编译libjpeg-turbo库,tar -zxvf libjpeg-turbo-2.1.3.tar.gz && cd libjpeg-turbo-2.1.3 && mkdir build && cd build && cmake .. && make,如下图

  2. 修改djepg.c

#include "jinclude.h"
#include "jpeglib.h"
#include <setjmp.h>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;static 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, 1);}int main(int argc, char **argv)
{struct jpeg_decompress_struct cinfo;struct my_error_mgr jerr;FILE * infile;FILE * outfile;int row_stride;unsigned char *buffer;struct timeval start,end;gettimeofday(&start, NULL);if (argc != 3){printf("Usage: \n");printf("%s <jpg_file> <output_file>\n", argv[0]);return -1;}// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}if ((outfile = fopen(argv[2], "w")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}printf("size :%d\n",sizeof(struct jpeg_decompress_struct));//错误处理 回调函数  cinfo.err = jpeg_std_error(&jerr.pub);jerr.pub.error_exit = my_error_exit;if (setjmp(jerr.setjmp_buffer)) {printf("cinfo->err->msg_code :%d\n",cinfo.err->msg_code);jpeg_destroy_decompress(&cinfo);fclose(infile);fclose(outfile);return 0;}jpeg_create_decompress(&cinfo);jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header获得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 设置解压参数,比如放大、缩小cinfo.scale_num=1;cinfo.scale_denom=1;// 启动解压:jpeg_start_decompress   jpeg_start_decompress(&cinfo);/* 输出的图象的信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);//解压的是rgb,故为3元素// 一行的数据长度row_stride = cinfo.output_width * cinfo.output_components;buffer = malloc(row_stride);//分配空间用来存储一行数据// 循环调用jpeg_read_scanlines来一行一行地获得解压的数据while (cinfo.output_scanline < cinfo.output_height) {(void) jpeg_read_scanlines(&cinfo, &buffer, 1);fwrite(buffer, row_stride, 1, outfile);}gettimeofday(&end, NULL);long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;printf("time =%ld\n", timeuse);free(buffer);fclose(infile);fclose(outfile);jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0;
}

3.执行make,mkdir test && cp djpeg test && cd test && ./djpeg test.jpg test.rgb,效果如下

三、向其它平台移植

适配不同交叉编译器,cd build && cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc .. ,其余步骤同上

LIBJPEG-TURBO库移植相关推荐

  1. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  2. Keil to STM32CubeIDE标准库移植

    Keil to STM32CubeIDE标准库移植 一.新建CubeIDE空白工程 这里以个人使用的STM32F407为例,新建空白工程即不使用HAL库,上图 注意选择Empty,然后Finish 建 ...

  3. Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation

    适用于x86架构的安卓5.0以上需要root,或者离线改文件,但并非全部适用:本文仅为个人经验,未涵盖的地方需要自行探索. 手动移植Android x86的arm兼容库(houdini/ndk_tra ...

  4. 【STM32F429的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5 ...

  5. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32

    ** 0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC ** 由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码 ...

  6. 【GD32F427开发板试用】二、USB库移植与双USB CDC-ACM功能开发

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:chenjie [GD32F427开发板试用]一.环境搭建与freertos移植 [GD ...

  7. USB学习笔记(5)STM32 USB库移植步骤

    USB学习笔记(5)STM32 USB库移植步骤 本文是将官网的USB驱动库文件移植到自己的工程里面,实现USB功能的具体移植步骤说明,实现Custom_HID功能. 1.先准备一个工程模板 获取工程 ...

  8. STM32从零到一,从标准库移植到HAL库,UART串口1以DMA模式收发不定长数据代码详解+常见问题 一文解析

    前言 本文的参考资料 感谢提供标准库版本的CSDN同学:这两篇文章至少是我看过的最详细的标准库配置DMA版本.而且代码实测稳定能用. STM32 | DMA配置和使用如此简单(超详细)_...| .. ...

  9. SD卡之FATFS库移植

    方法一:官网库移植 1) 官网下载Fatfs库 FATFS官网 2) 将源文件添加到工程 该工程需要实现某存储器的读写等底层驱动,比如SD卡或者FLASH亦或者磁盘等存储介质 ff.c //FatFs ...

  10. STM32固件库移植(开发环境的搭建)

    STM32固件库移植(开发环境的搭建) 以下过程是手动移植,过程繁琐,不感兴趣的可以绕路学习CubeMX. 下文阐述两种基本开发环境的搭建方法,HAL库的添加将放在下期 1.基本开发环境的搭建 先创一 ...

最新文章

  1. 洋哥大讲堂之解决Windows10操作系统中,“启用或关闭windows功能”里没有IE选项的问题...
  2. WPF实现Map加载
  3. Linux Note
  4. matlab的示波器保存figure图像
  5. leetcode - 55. 跳跃游戏
  6. Spring Boot Executable jar/war 原理
  7. PHP实现动态获取函数参数的方法
  8. 排序算法专题-冒泡排序
  9. MySQL与Oracle的DDL、DML语法对比(含可重复执行SQL脚本编写方式)
  10. paypal接口文档android,PAYPAL --集成API接口教程
  11. java的学习内容,附高频面试题合集
  12. 《畅玩NAS》 使用树莓派打造一个NAS服务器
  13. 数织游戏中的程序思维和数织的程序解法
  14. led的伏安特性曲线 matlab实现_灯泡伏安特性仿真实验的实现算法
  15. 23行代码下载逆水寒壁纸图片
  16. 【计算机网络】—— HTTP升级为WebSokect
  17. 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!
  18. Anaconda安装说明
  19. QT5.14 安装与下载 教程
  20. 这个设计思想能启蒙你很多年,嵌入式裸机按键扫描

热门文章

  1. java完全自学手册 pdf_fortran教程下载
  2. 数据库(SQL)面试题,基础知识(超全面)
  3. nbu mysql_mysql数据备份之NBU
  4. 简单易学的机器学习算法——极限学习机(ELM)
  5. ISO 22000:2018食品安全管理体系介绍、认证及其标准
  6. 【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题三方案及Python实现
  7. GBaseStudio连接操作GBase数据库
  8. H5商城与小程序商城哪个好_应该怎么选择_OctShop
  9. C++中的万能头文件
  10. 华为性格测试通关指南