技术标签: NDK
libjpeg-turbo | Main / libjpeg-turbo
libjpeg编译文档
libjpeg-turbo/BUILDING· GitHub
Mac环境编译 libjpeg压缩库
cmake version 3.5.2
针对的arm-v7完整的编译脚本
#!/bin/bash
# Set these variables to suit your needs
NDK_PATH=/Users/dsh/Downloads/android/NDK/android-ndk-r17c
TOOLCHAIN=gcc
ANDROID_VERSION=21
# cd {build_directory}
cmake -G"Unix Makefiles" \
-DANDROID_ABI=armeabi-v7a \
-DANDROID_ARM_MODE=arm \
-DANDROID_PLATFORM=android-${ANDROID_VERSION} \
-DANDROID_TOOLCHAIN=${TOOLCHAIN} \
-DCMAKE_ASM_FLAGS="--target=arm-linux-androideabi${ANDROID_VERSION}" \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
# [additional CMake flags] {source_directory}
make
编译完成以后 需要在libjpeg-turbo-2.0.4 文件夹下找到以下文件
1、 需要用到的头文件
turbojpeg.h
jpeglib.h
jmorecfg.h
jerror.h
jconfig.h
2、编译完成的静态库
libturbojpeg.a
编写代码
const char *path = env->GetStringUTFChars(path_, 0);
//从bitmap获取argb数据
AndroidBitmapInfo info;//info=new 对象();
//获取里面的信息
AndroidBitmap_getInfo(env, bitmap, &info);
//得到图片中的像素信息
uint8_t *pixels;//uint8_t char java byte *pixels可以当byte[]
AndroidBitmap_lockPixels(env, bitmap, (void **) &pixels);
//jpeg argb中去掉他的a ===>rgb
int w = info.width;
int h = info.height;
int color;
//开一块内存用来存入rgb信息
uint8_t *data = (uint8_t *) malloc(w * h * 3);//data中可以存放图片的所有内容
uint8_t *temp = data;
uint8_t r, g, b;
//循环取图片的每一个像素
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
color = *(int *) pixels;//0-3字节 color4 个字节 一个点
//取出rgb
r = (color >> 16) & 0xFF;// #rrggbb 16 0000rr 8 00rrgg
g = (color >> 8) & 0xFF;
b = color & 0xFF;
//存放,以前的主流格式jpeg bgr
*data = b;
*(data + 1) = g;
*(data + 2) = r;
data += 3;
//指针跳过4个字节
pixels += 4;
}
}
//把得到的新的图片的信息存入一个新文件 中
write_JPEG_file(temp,w,h,q,path);
AndroidBitmap_unlockPixels(env, bitmap);
free(data);
env->ReleaseStringUTFChars(path_, path);
理解哈夫曼算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMNQFZTX-1580611679589)(:storage/83fcef4e-9744-4603-8b77-b6af6186e1c1/b5c83a8f.png)]
编写libjepg 压缩代码
void write_JPEG_file(uint8_t *data, int width, int height, jint quality, const char *path) {
// 1、 创建jpeg压缩对象
jpeg_compress_struct jpegStruct;
jpeg_error_mgr errorMgr;
jpegStruct.err = jpeg_std_error(&errorMgr);
jpeg_create_compress(&jpegStruct);
// 2、 指定存储文件
FILE * file = fopen(path,"wb");
jpeg_stdio_dest(&jpegStruct,file);
// 3、 设置压缩参数
jpegStruct.image_width = width;
jpegStruct.image_height = height;
jpegStruct.input_components = 3;
jpegStruct.in_color_space = JCS_RGB;
jpeg_set_defaults(&jpegStruct);
jpegStruct.optimize_coding = true;
jpeg_set_quality(&jpegStruct,quality,1);
// 4、 开始压缩
jpeg_start_compress(&jpegStruct,1);
// 5、循环写入每一行数据
int row_stride = width * 3;
JSAMPROW row[1];
while (jpegStruct.next_scanline < jpegStruct.image_height){
uint8_t * pixels = data + jpegStruct.next_scanline;
row[0] = pixels;
jpeg_write_scanlines(&jpegStruct,row,1);
}
// 6、压缩完成
jpeg_finish_compress(&jpegStruct);
// 7、释放jpeg对象
fclose(file);
jpeg_destroy_compress(&jpegStruct);
}
文章浏览阅读1.1w次,点赞5次,收藏15次。分享一个可以查王者荣耀苹果区战力的接口,数据每周一会更新接口地址 支持GET、POSThttps://gamehook.top/api/hero/select所需参数:auth_code 授权码(身份验证) f0845d444f04eb24 必传hero_name 英雄名称 支持模糊搜索 必传返回结构{“code”:0,“msg”:“查询成功”,“data”:{“id”:19,“hero_name”:“曜”,“hero_photo”:“https://gamehook.top//u_王者荣耀战力查询网址
文章浏览阅读583次。“考博复试八大常见问题”相信是准备参加医学考博的朋友比较关心的事情,为此,医学教育网小编整理内容如下:第 1 问:初试和复试哪个更重要?初试成绩是敲门砖,对最终是否被录取有一定的参考价值,但即使在初试中考出高分也是属于过去,导师还要结合复试成绩来作出最终决定(这个是显而易见的,不然还要复试干嘛)。换言之,初试成绩决定不了录取,对录取的影响有限,但是话又说回来,前提是你要有复试机会!第 2 问:自我..._计算机申博面试题
文章浏览阅读8.5k次。Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.在mvn install打包安装到本地仓库时 出现了这个错误 仔细查找 是因为单元测试没有通过 存在失败的断言 将断言调试成功 即可安装_caused by: org.apache.maven.plugin.mojofailureexception: there are test fail
文章浏览阅读626次。转自:http://www.cnblogs.com/Jessy/p/3535612.htmlTCP的三次握手(建立连接)和四次挥手(关闭连接)参照:http://course.ccniit.com/CSTD/Linux/reference/files/018.PDFhttp://hi.baidu.com/raycomer/item/944d23d9b502d13be3108_net.ipv4.tcp_syncookies与性能 site:blog.csdn.net
文章浏览阅读645次。波卡生态正在逐渐发力。作者 | 秦晓峰 编辑 | 郝方舟出品 | Odaily星球日报(ID:o-daily)过去这周的市场,堪称魔幻。随着 SHIB 价格的冲高,PIG、Lion 等...
文章浏览阅读358次。小程序已经无所不在的侵入了我们的生活。刚刚诞生时,大家认为微信小程序不过是升级版的“服务号”,也有人把它看作“借尸还魂”的直达号或H5网页。随着微信小程序在我们生活中的作用越来越大,业界此前的诸多偏见..._batt防三方
文章浏览阅读5.5k次。如果你装了ubuntu桌面版就会发现默认情况下桌面左边会有一个侧边栏,从中我们可以启动一些软件,但是这个侧边栏一直显示在桌面左边不是很美观,还会占据桌面的的空间。我们可以使其自动隐藏起来,当我们需要时只要把鼠标放到桌面左边它就会出现。1. 系统设置-外观打开系统设置,打开外观选项2. 点击&amp;amp;amp;quot;行为&amp;amp;amp;quot;标签3. 打开自动&amp;amp;amp;quot;隐藏启动器&a_如何隐藏ubuntu侧边栏
文章浏览阅读1.1w次,点赞11次,收藏68次。1、session对象概述 session对象是由服务器自动创建与用户请求相关的对象。服务器会为每一个用户创建一个session对象用来保存用户信息,跟踪用户操作。该对象内部使用Map类来保存数据,因此它的数据类型是key-value形式。对应javax.servlet.http.HttpSession.class对象。 服务器为不同的浏览器在内存中创建用于保存数据的对象叫seesio_session撖寡情
文章浏览阅读3.2w次,点赞6次,收藏50次。前言: 加密狗复制技术现在已经很成熟了,如果您想把手上某一个USB加密狗复制一下,不妨先自己尝试一下复制,实在复制不了,可以请专业人士帮忙(比较知名的如COPYONE工作室)。今天软件小编已经帮大家找来了,就是这款USB加密狗克隆复制软件。下载地址:https://download.csdn.net/download/QQ528621124/19774921加密狗复制克隆其实说白了就是加密狗复制或者模拟,加密狗就像一个U盘一样,存储了特殊的加密串。加密狗是外形酷似U盘的一种硬..._u盘加密狗复制克隆软件
文章浏览阅读953次,点赞3次,收藏3次。第六章、树和二叉树——内容简介线性结构中结点间具有惟一前驱、惟一后继关系,而非线性结构中结点间前驱、后继的关系并不具有惟一性。其中,在树型结构中结点间关系是前驱惟一而后继不惟一,即结点之间是一对多的关系;直观地看,树结构是指具有分支关系的结构(其分叉、分层的特征类似于自然界中的树)。树和图的理论基础属离散数学内容,数据结构讨论的重点在树和图结构的实现技术。本章主要讨论树结构的特性、存储及其操作的实现。第1讲树的基本概念——内容简介本节主要介绍:树的基本概念树相关的术语_给出树的广义表形式怎样看度是多少
文章浏览阅读176次。作弊检讨书500字范文作弊实在不是一件明智之举的事,犯了作弊这个错误,该怎么写检讨呢?下面为大家精心了作弊检讨书500字范文,仅供参考。亲爱的班主任:我是高二14班的一名普通学生,写这封检讨书反省我在这次期中考试中作弊的错误。我怀着十万分的愧疚和十万分的难过给你写下这封检讨书:关于此次期中考试,我完全是因为平时上课的不认真,老师布置的作业没有按时完成,因为对于这次考试没有十足的把握,又怕考不好被父..._单片机考试发草稿纸
文章浏览阅读1.5w次,点赞7次,收藏24次。转载自:http://www.myexception.cn/program/1930025.htmlJava调用 新浪微博API 接口发微博,逐条讲解,绝对清晰最近要做个课程设计,使用微博控制树莓派,树莓派再控制发光二极管的亮和灭,主要设计分两层,上层是用Java调用新浪微博API来实现对微博旳监听,当我的微博被回复时能够自动读取评论内容,并根据评论的指令内容来决定树莓派的控制动作_微博开发平台 发送微博 java