#编译脚本 build.sh
#!/bin/bash
gcc_prefix=$1
install_dir=$2
cache_dir=$3
host_name=" "
if  test -z ${gcc_prefix} ;thengcc_prefix=/usr/bin/
elsehost_name=arm-linux
fi
if  test -z ${install_dir} ;theninstall_dir=$(pwd)/install
fi
if  test -z ${cache_dir} ;thencache_dir=$(pwd)/out
fi
echo "gcc_prefix=${gcc_prefix}"
echo "install_dir=${install_dir}"
echo "cache_dir=${cache_dir}"
echo "host_name=${host_name}"
cd ./libjpeg;
./configure  --prefix=${cache_dir} --exec-prefix=${cache_dir}  --enable-shared --enable-static --host=${host_name} CC=${gcc_prefix}gcc LD=${gcc_prefix}ld
make -s &&make install
rm -rf ${install_dir}
mkdir -p ${install_dir}
mkdir -p ${install_dir}/lib
cp -r ${cache_dir}/include ${install_dir}
cp -r ${cache_dir}/lib/libjpeg.a ${install_dir}/lib
#rm ${cache_dir} -rf#测试文件 main.cpp
#include <setjmp.h>
#include<cstdio>
#include "jpeglib.h"
#include <string>
#include<time.h>
#include <sys/time.h>
unsigned long rgb32_to_jpeg(int width,int height,unsigned char **save,unsigned char *input,int quality)
{//argb : bgra bgra bgra//rgb24: bgr bgr bgr//像素转换unsigned char *tmp=new unsigned char[width*height*3];for(int i= 0;i<height;i++){for(int j=0;j<width;j++){int input_base_pos=i*width*4+j*4;int now_base_pos=i*width*3+j*3;unsigned char alpha=input[input_base_pos+3];if(alpha==255||alpha==0){tmp[now_base_pos+2]=input[input_base_pos];tmp[now_base_pos+1]=input[input_base_pos+1];tmp[now_base_pos+0]=input[input_base_pos+2];}else {unsigned char b=input[input_base_pos];unsigned char g=input[input_base_pos+1];unsigned char r=input[input_base_pos+2];double rate=alpha/255;unsigned char tb=static_cast<unsigned char >(b/rate);unsigned char tg=static_cast<unsigned char >(g/rate);unsigned char tr=static_cast<unsigned char >(r/rate);tmp[now_base_pos+2]=static_cast<unsigned char >(tr+(1-rate)*(255-tr));tmp[now_base_pos+1]=static_cast<unsigned char >(tg+(1-rate)*(255-tg));tmp[now_base_pos+0]=static_cast<unsigned char >(tb+(1-rate)*(255-tb));}}}struct jpeg_compress_struct jpeg;struct jpeg_error_mgr jerr;//错误输出在绑定jpeg.err = jpeg_std_error(&jerr);//初始化压缩对象jpeg_create_compress(&jpeg);//压缩参数设置jpeg.image_width = width;jpeg.image_height = height;jpeg.input_components  = 3;jpeg.in_color_space = JCS_RGB;//参数设置为默认的jpeg_set_defaults(&jpeg);//还可以设置些其他参数:设定编码jpeg压缩质量jpeg_set_quality(&jpeg, quality, TRUE);unsigned long ret=width*height*3;*save=new unsigned char[ret];jpeg_mem_dest(&jpeg,save,&ret);//开始压缩。执行这一行数据后,无法再设置参数了!jpeg_start_compress(&jpeg, TRUE);JSAMPROW row_pointer[1];int row_stride = width*3;//从上到下,设置图片中每一行的像素值int i=0;while(jpeg.next_scanline < jpeg.image_height){row_pointer[0] = & tmp[jpeg.next_scanline * row_stride];(void)jpeg_write_scanlines(&jpeg, row_pointer, 1);i++;//printf("i %d \r\n",i);}delete [] tmp;//结束压缩jpeg_finish_compress(&jpeg);jpeg_destroy_compress(&jpeg);return ret;
}
int main(int argc,char*argv[])
{if(argc<2)return 0;FILE *fp=fopen(argv[1],"rb");fseek(fp,0,SEEK_END);auto size=ftell(fp);printf("file_size %d\r\n",size);if(size<=0)return 0;fseek(fp,0,SEEK_SET);auto buf=new  unsigned char[size];auto ret=fread(buf,1,size,fp);printf("rgb _size %lu \r\n",ret);fclose(fp);int width=234;int height=318;unsigned char *save;struct timeval now;gettimeofday(&now,nullptr);auto jpg_size=rgb32_to_jpeg(width,height,&save,buf,100);struct timeval done;gettimeofday(&done,nullptr);printf("%lu  escape time %ld us\r\n",jpg_size,(done.tv_sec-now.tv_sec)*1000*1000+done.tv_usec-now.tv_usec);fp=fopen("test.jpg","wb+");fwrite(save,1,jpg_size,fp);delete [] save;fclose(fp);return 0;
}

LIBJPEG交叉编译并用其将ARGB32转JPEG相关推荐

  1. 【原创】Libjpeg 库使用心得(一) JPEG图像DCT系数的获取和访问

    [原创]继续我的项目研究,现在采用Libjpeg库函数来进行处理,看了库函数之后发现C语言被这些人用的太牛了,五体投地啊...废话不多说,下面就进入正题. Libjpeg库在网上下载还是挺方便的,这里 ...

  2. android使用的图片压缩格式,Android 之使用libjpeg压缩图片

    一.环境 Android Studio 4.0.1 NDK R15c so包是2.0.6生成的 libturbojpeg.so 二.准备 1.编写native方法并用javah命令生成头文件 obje ...

  3. 图形图像基础 之 jpeg介绍

    一.[概念]jpeg相关概念简介 jpeg-一种影像有损压缩标准方法 后缀jpg/jpeg JPEG(Joint Photographic Experts Group 联合图像专家小组)是一种针对照片 ...

  4. framebuffer显示JPEG图片

    framebuffer显示JPEG图片 2011-05-03 20:14:45 分类: 嵌入式 转自http://www.linuxsense.org/archives/281.html http:/ ...

  5. 一般源码安装添加的GD库 是不支持 jpeg 格式的图片的

    一般源码安装添加的GD库 是不支持 jpeg 格式的图片的,只支持如下格式 GD Support enabled  GD Version bundled (2.0.34 compatible)  GI ...

  6. Android仿微信高效压缩图片(libjpeg)

    用过ios手机的同学应该很明显感觉到,ios拍照1M的图片要比安卓拍照排出来的5M的图片还要清晰.这是为什么呢? 这得了解android底层是如何对图片进行处理的. 当时谷歌开发Android的时候, ...

  7. libjpeg学习2:内存篇

    前面文章说到到libjpeg的使用示例,里面的例子实际上是文件的操作,即解压JPEG文件,因为libjpeg有对FILE操作的函数,所以代码直接用jpeg_stdio_src(&cinfo, ...

  8. Android直播开发之旅(15):libjpeg库的编译移植与使用

    1. libjpeg介绍  libJPEG库是一款功能强大的JPEG图像处理开源库,它支持将图像数据压缩编码为JPEG格式和对原有的JPEG图像解压缩,Android系统底层处理图片压缩就是用得lib ...

  9. 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)

    最近刚刚接触XILINX的ZYNQ板,刚接触没有十天.XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多.据说今年TI的最新产品也加入了ZYNQ板. 之前的MIPS处理器设计与 ...

最新文章

  1. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)
  2. 【C++】拷贝,赋值与构造
  3. SAP WM初阶之移动类型设置里的Additional Data?
  4. 人工智能时代,中国或是唯一能够和美国竞争的国家!
  5. C语言 小游戏之贪吃蛇
  6. Java Process中waitFor()的问题
  7. mysql数据库开发笔记_MySQL数据库生成数据库说明文档
  8. linux之shell脚本管理(一)
  9. Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
  10. 蚂蚁集团上市 员工身价暴涨人均一套房?支付宝:没有 但会努力的
  11. 安装ESXI 5.5卡在LSI_MR3.V00解决方案
  12. 我珍藏很久的网盘资源搜索网站和下载神器
  13. 1038: 绝对值最大
  14. 数据结构 - 线性表顺序存储结构
  15. 九连环解法和小程序。
  16. WordPress按钮人机验证(1)
  17. ASUS AC88U 路由器开机自启方法
  18. 专访腾讯安全王雷雷丨构建智能风控体系,护航私域营销安全
  19. 163888一个普通程序员写给COO李大学的一封Mail(不是转载)
  20. java里面自行车的属性_Java模拟自行车电动车属性调用

热门文章

  1. 1、SAP BI概览
  2. 封装js日期格式化函数
  3. 表达心情的的C语言程序,今天心情好来分享一段代码,嘎嘎嘎
  4. Java SE学习【二】——面向对象
  5. 有温度的智慧城市,像生命一样生长
  6. 关于error: #20: identifier “XXXX“ is undefined缺失.h文件的问题
  7. Docker热迁移研究背景,问题描述及解决方案
  8. 敏捷 橄榄球运动_传送大学橄榄球的最便宜方法(无电缆)
  9. IP Spoof技术
  10. volte 通话通过什么和modem交互?