在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作
目录
一、下拉google官方的libyuv库代码
二、在android项目中集成libyuv库
1.环境配置
2.拷贝libyuv源码文件
编辑3.配置cmake libyuv相关的链接编译等
三、使用libyuv库
1.libyuv库完成camera的旋转
2.libyuv库实现翻转
3.libyuv库实现缩放
4.libyuv库实现裁剪
一、下拉google官方的libyuv库代码
官方地址 https://chromium.googlesource.com/libyuv/libyuv
如果打不开打不开,可以去 github 上下载:https://github.com/lemenkov/libyuv
下拉完成后目录如下所示:
主要我们用到的是include和source目录内容
二、在android项目中集成libyuv库
1.环境配置
首先配置方面要支持ndk,所以需要下载cmake和ndk配置,如下:
然后下面的集成流程是根据Android Studio Electric Eel | 2022.1.1 Patch 2版本进行的,不同版本可以稍有差异
2.拷贝libyuv源码文件
将include的文件和source文件拷贝到项目中,我这边是专门在cpp目录下建了一个libyuv文件夹,然后将include文件夹和source文件夹拷贝进来,如下:
3.配置cmake libyuv相关的链接编译等
首先我的cmake路径和libyuv是在同一目录下,这个老版本android studio和新版本有所差异,注意分辨,和下面的cmake中配置libyuv路径有关,然后我这边是以同一目录下进行配置的,配置文件如下所示:
# For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum version of CMake required to build the native library.cmake_minimum_required(VERSION 3.6.0)# Declares and names the project.project("xxx")# Creates and names a library, sets it as either STATIC # or SHARED, and provides the relative paths to its source code. # You can define multiple libraries, and CMake builds them for you. # Gradle automatically packages shared libraries with your APK.set(baseCppPath "libyuv")SET(ly_src_dir ${baseCppPath}) FILE(GLOB_RECURSE ly_source_files ${ly_src_dir}/*.cc) LIST(SORT ly_source_files)add_library( # Sets the name of the library.liveassistant# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).${ly_source_files}native-lib.cpp)include_directories(${baseCppPath}/include)# Searches for a specified prebuilt library and stores the path as a # variable. Because CMake includes system libraries in the search path by # default, you only need to specify the name of the public NDK library # you want to add. CMake verifies that the library exists before # completing its build.find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)# Specifies libraries CMake should link to your target library. You # can link multiple libraries, such as libraries you define in this # build script, prebuilt third-party libraries, or system libraries.target_link_libraries( # Specifies the target library.xxx# Links the target library to the log library# included in the NDK.jnigraphics${log-lib})如果想详细了解上面cmake配置的具体内容可参考:https://gonglipeng.blog.csdn.net/article/details/120026867
三、使用libyuv库
1.libyuv库完成camera的旋转
首先在jni中的cpp文件中添加头文件,如下:
头文件
|
然后是cpp文件的具体实现
|
上面xxx对应自己的路径名
然后是java层代码实现,先加载so包:
|
然后实现java代码,如下:
|
上面两种实现一是直接传入camera2中通过OnImageAvailableListener回调获取的Image,部分代码如下:
另一种方式是传递中间数据YuvFrame,然后写存储数据的YuvFrame类,如下,注意是kotlin方式写的
|
2.libyuv库实现翻转
翻转有水平翻转和垂直翻转,垂直翻转可以直接通过旋转实现,水平翻转需要重新调用libyuv库,代码如下所示:
|
|
3.libyuv库实现缩放
注意宽高必须为偶数,不然会出现花屏,代码如下所示:
|
|
4.libyuv库实现裁剪
注意宽高和位置必须为偶数,不然会出现花屏,代码如下:
|
|
上面的裁剪需要传入一个原始数据的数组,得到原始数据的代码如下:
|
如上就是使用libyuv的旋转、翻转、缩放、裁剪的核心操作,如果需要将image转换成YuvFrame,可以如下操作,代码:
|
|
在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作相关推荐
- 在Android项目上集成Google语音(不使用手机自带引擎)
需求: 最近需要在项目中需要集成各家的语音识别功能.包括讯飞,Alexa以及google的语音.前面两家的都有对应的api,集成到对应的项目中比较简单,这里只介绍如果集成Google的语音在项目上,像 ...
- Android平台上集成海康SDK(二)
Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...
- Android项目上传到GItHub
Android项目上传到GitHub管理_Mac 步骤 1.创建新的Anroid项目 2.GitHub创建新的代码仓库 3.GitHub远程版本库克隆到本地 3.1.进入项目文件夹 3.2把远程版本库 ...
- Android平台上集成大华SDK(二)
Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...
- Android项目如何集成ZXing二维码扫描功能
最近的项目有二维码扫描跳转网页的需求,就是利用手机摄像头,扫描并解析二维码内容,内容由生成二维码的时候定义,我项目现在的需求就是一个包含了网址的二维码,网上有生成二维码的工具,也可以自己开发一个. 搜 ...
- takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...
TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...
- Android平台上集成萤石SDK
这篇文章,就Android平台上如何集成萤石SDK进行讲解. 前言: 萤石是海康威视集团旗下的一家做视频云的公司.我们接入萤石设备,实现实时预览.远程回放.抓图.切换画质等功能. 关于具体如何接入,包 ...
- Android项目中集成华为账号登录、支付
最近项目中集成了华为账号登录与支付的功能,把踩过的坑和过程记录下来. 先看下支付效果图: 支付价格0.01请忽略,因为这是为了测试用的. 刚开始接到这个项目的时候我很奇怪,为什么要集成华为支付呢,原有 ...
- Android项目持续集成之Jenkins的使用
原址 Jenkins拥有的特性包括: 1. 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持. 2. 易于配置-所有配置都是通过其提供的web界面实现. 3. 集 ...
最新文章
- Java项目:宠物商城系统(java+Springboot+Maven+mybatis+Vue+mysql)
- WCFAppFabric :异常消息: 内存入口检查失败
- java springcloud版b2b2c社交电商spring cloud分布式微服务 (四) 断路器(Hystrix)
- Linux C: IO库函数,文件流缓冲,变参函数
- boost的chrono模块运行时解析的测试程序
- 域控下发脚本_域环境下做到单用户登陆控制脚本
- 高质量的设计灵感社区网站
- python爬虫知识点总结(七)PyQuery详解
- 电脑显示未安装任何音频输出设备_音频频谱分析仪插件Voxengo SPAN Plus介绍及安装教程...
- LintCode Copy Books
- 纯css 箭头,纯CSS实现小箭头的案例
- 小瘦牛虚拟无线路由器官方版
- HDU 1224(动态规划)
- 低功耗蓝牙开发权威指南--第三部分 主机 (第9-12章)
- 喷淋系统在安装算量软件中如何计算工程量?
- python简易电话簿系统_Python实现电话簿工具(代码分享)
- 如何搭建一个爬虫代理服务?
- linux 下strip工具,linux下使用strip如何对库和可执行文件进行裁减
- Virtex—5 GTP和Virtex—6 GTX间匹配通信研究及应用
- 计算机的it入门知识点,基础乐理知识点电脑基础知识IT计算机专业资料-基础乐理知识点(5页)-原创力文档...