源码链接:https://github.com/smzhldr/AGLFramework

一、前言

商店里有数十款的美颜相机类产品,以及像抖音,唱吧之类带有视频的软件,功能很强大,其实现原理基本上都是以OpenGL ES为核心的特效处理,笔者码了一个很轻量级的Android OpenGL ES及Camera开发框架,意在使用的时候专注的编写OpenGL代码,而不是浪费时间在OpenGL环境搭建以及了解奇怪的函数接口。

这个框架(AGLFramework)是轻量级的,但扩展性很好,也可根据自己的需求定制,能满足大部分项目的需求,使用起来很方便,当前版本为3.2版本,最新版可以到GitHub获取源码,目前具有相机的分辨率切换,摄像头切换,自动对焦等功能,带有美白,磨皮,几十种滤镜,静态贴纸等几个特效处理功能,系列文章会逐步增加功能。我们先看下完整的效果 (借用下子怡姐姐的美照,打扰了)。

二、五分钟开发美颜相机

1.新建一个空项目

关于新建Android project的具体步骤此处省略一千万字,一路next就可以。

2.集成AGLFramework开发框架到项目中

集成非常简单,能写Hello world就足够,只需几步:

1.在project/build.grdle文件中添加依赖:

allprojects {

repositories {

...

maven { url 'https://jitpack.io' }

}

}

2.在app/build.grdle文件中添加依赖:

dependencies {

implementation 'com.github.smzhldr:AGLFramework:v3.2'

}

3.权限申请:

相机相关的都需要在AndroidManifest.xml文件中申请权限:

6.0及以上还需要在代码中动态申请权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);

}

这里给出了系统Api申请权限的方法,推荐开发中使用RxPermission

4.调用美颜相机:

新建一个Activity,在Activity的xml布局文件中加入美颜相机的View:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".CameraActivity">

android:id="@+id/camera_preview"

android:layout_width="match_parent"

android:layout_height="match_parent" />

RelativeLayout>

在Activity中加入以下代码:

public class CameraActivity extends Activity {

private AGLView aglView;

private AGLCamera aglCamera;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_camea);

aglView = findViewById(R.id.camera_preview);

}

@Override

protected void onResume() {

super.onResume();

if (aglCamera == null) {

//需要填写一个自己手机支持的分辨率

//或使用缺省参数允许自动选择

aglCamera = new AGLCamera(aglView, 1080, 1920);

}

aglCamera.open();

}

}

@Override

protected void onPause() {

super.onPause();

if (aglCamera != null) {

aglCamera.close();

}

}

}

如果想使用特效,以磨皮为例,找个你认为合适的地方加入以下代码:

SmoothFilter smoothFilter = new SmoothFilter(this);

smoothFilter.setSmoothLevel(0.88);

aglView.setFilter(smoothFilter);

如果想切换摄像头,找个合适的位置加入一行代码:

aglCamera.switchCamera();

再次声明,使用相机之前务必要申请相关权限

现在编译运行,就可以看到一个简单的相机了,而且具有磨皮美颜的功能。

三、展望未来

AGLCamera类提供了自动聚焦,分辨率切换,摄像头切换等接口,以及多种特效处理功能,随着系列文章将更深入的学习OpenGL ES的使用和原理,可以查看下方源码链接或者跳转到主页查看Android OpenGL ES从入门到进阶的系列文章,源码的demo中有关于各个功能的使用。

如有疑问欢迎随时留言交流。

源码链接

android 美颜相机开发,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...相关推荐

  1. android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...

    源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...

  2. Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机

    源码链接:https://github.com/smzhldr/AGLFramework 基础知识入门篇(Hello Triangle) 渲染纹理到屏幕 GLSurfaceView预览相机 简单易用的 ...

  3. 【Android OpenGL开发】OpenGL ES与EGL介绍

    什么是OpenGL ES OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的编程图形程序接口,主要用于图像的渲染. Android提供了简化版的OpenGL接口,即O ...

  4. Android OpenGL ES 从入门到精通系统性学习教程

    1 为什么要写这个教程 目前这个 OpenGL ES 极简教程的更新暂时告一段落,在此之前,很荣幸获得了阮一峰老师的推荐. 因为在工作中频繁使用 OpenGL ES 做一些特效.滤镜之类的效果,加上平 ...

  5. 在 Android* 平台上设置原生 OpenGL ES*

    Setting up Native OpenGL ES* on Android* Platforms final.docx BSD2.0.txt ParticleSystemNDK.zip READM ...

  6. Android Camera API 2使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)

    这段时间有点忙,一直没时间写第三篇教程,其实代码很早之前就写好了.本系列教程会有三篇文章讲解Android平台滤镜的实现方式,希望在阅读本文之前先阅读前面两篇文档. 第一篇 Android Camer ...

  7. 【OpenGL ES】入门及绘制一个三角形

    本文首发于个人博客:Lam's Blog - [OpenGL ES]入门及绘制一个三角形,文章由MarkDown语法编写,可能不同平台渲染效果不一,如果有存在排版错误图片无法显示等问题,烦请移至个人博 ...

  8. OpenGL ES on iOS --- 光照进阶

    OpenGL ES on iOS --- 光照进阶 简述 本文记录我记录我学习 坐标体系和矩阵转换的过程,加深学习便于后续查询,可能有些描述不够准确,或者内容不够充实,还请多多指正,共同学习. 光源分 ...

  9. Android 3D开发,OpenGL ES 的使用(一)

    最近有人问OpenGL ES 的使用,我通过几行代码演示一下. 不需要讲 来源 历史或大篇前奏.. 通过短短的一段就能迅速理解OpenGL ES 初步使用方法,对OpenGL ES 有了大概的概念和感 ...

最新文章

  1. .NET中的IO操作基础介绍
  2. redis源码之字符串压缩
  3. struts文件上传时异常问题
  4. 有法院被执行人记录还能贷款吗?
  5. Fortran向C传递NULL值
  6. 阿里开始招聘.NET,要求WPF!
  7. java metrics 简书_Spring Boot Metrics
  8. Java 修改文件最后的创建日期
  9. C++ 标准库之cctype
  10. oracle存储过程中数组的使用
  11. zend studio 10.6.2破解和汉化
  12. python调用实例做父类_Python super() 调用父类方法, 但是父类中 self 并不是父类的实例而是子类的实例?...
  13. perl的bareword
  14. Atitit java rest mvc微服务原理以及框架选型 目录 第一节 Mvc原理 model controler view 1 第二章 Spark 最简单 1 第一节 Sprbt to
  15. java宠物店管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  16. EditPlus 快捷键大全
  17. QQ第一位产品经理吴宵光:腾讯17年发展史上的14个关键点
  18. Linux安装conda未找到命令
  19. 电脑计算机工具计算,计算机的计算器在哪 自己的电脑上的计算器在哪里找
  20. 去哪儿旅行携程旅行淘宝旅行移动端产品分析报告

热门文章

  1. [杂谈]关于我在云电脑上想薅百度云的羊毛
  2. python使用turtle库画出大写的字母z_Python绘图turtle库
  3. java的synthetic_java synthetic关键字
  4. java jvm 内存查看
  5. 线性回归算法 - python实现
  6. mysql的功能是什么_数据库的作用是什么
  7. layui弹框确认及取消按钮
  8. Linux环境Spark安装配置及使用
  9. matlab保存f黑白图片_【Matlab学习秘籍】文件读写完全版
  10. Matplotlib数据可视化学习打卡-Task01