自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(240)
  • 资源 (2)
  • 收藏
  • 关注

原创 OpenGL ES 3.0 shader 着色语言基础语法

前言在 OpenGL 开发中,不得不提到着色语言,着色语言用于编写顶点着色器和片段着色器。接下来就简单介绍一下着色语言的一些基础语法。备注:内容来自于《OpenGL ES 3.0编程指南》一书。一、版本规范在 OpenGL ES 3.0 中,顶点着色器和片段着色器的第一行总是声明着色器版本。使用如下语法声明着色器使用着色语言3.00版本:#version es 300没有声明或声明...

2019-03-31 00:38:34 4205

原创 OpenGL ES 3.0 对比 OpenGL ES 2.0 的异同点和新功能

一、相同点相比于 OpenGL ES 1.x 系列的固定功能管线,OpenGL ES 2.0 和 OpenGL ES 3.0 都是可编程图形管线。开发者可以自己编写图形管线中的 顶点着色器 和 片段着色器 两个阶段的代码。二、不同点OpenGL ES 3.0 是向后兼容 OpenGL ES 2.0 的。也就是说使用 2.0 编写的应用程序是可以在 3.0 中继续使用的。基于 2.0 拥有的...

2019-03-28 00:55:32 16470 2

原创 你可能不知道的几个 git 实用指令

前言很常见的不说了,介绍几个你们可能不知道但是却实用的命令吧,数量不多。一、克隆工程我们都知道克隆某个工程的代码使用 “git clone url”,这样默认拉取的是 master 分支的代码。如果你只想拉取某个分支的代码,可以使用该命令:git clone url -b <branch>示例:二、设置别名/缩写git 的诸多命令如 checkout,commit,s...

2019-02-28 23:29:22 745 1

原创 Android Studio 配置一键生成 JNI 头文件工具

一、前言我们知道进行 NDK 开发中,native 方法大多是需要进行静态注册的,如果手动一个个写,不仅容易出错,而且繁琐和浪费时间。那么有什么好用的工具可以使用呢?这个其实是有的,就在我们的JDK中就有一个 javah.exe 工具帮助我们生成 JNI 的头文件,我们只需要将其配置到 Android Studio 中就可以很方便的使用它了。二、效果示例如下,com_afei_opengl...

2019-02-28 00:03:17 5907 5

原创 Android Gradle 使用示例,各参数含义

前言目前 Android 的开发大都使用 Android Studio 了,而 Android Studio 所使用的 Gradle 也是大有文章,其中有许多可以定制和使用的技巧。Gradle 的语法是使用的 Groovy 语言,这里不做详细介绍了。下面是我总结的一些常用的选项以及释义:apply plugin: 'com.android.application'android {...

2019-02-27 00:18:55 1486

原创 自定义Camera系列之:GLSurfaceView + Camera2

一、前言假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。这里介绍 GLSurfaceView + Camera2 的组合。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharacteristics详解CameraCapture...

2019-02-14 00:16:19 5752 3

原创 自定义Camera系列之:TextureView + Camera2

一、前言之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。该篇介绍 TextureView ,这也是谷歌示例中使用的组合。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharact...

2019-01-31 00:12:52 5608 12

原创 自定义Camera系列之:SurfaceView + Camera2

一、前言之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。老规矩还是从 SurfaceView 说起。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharacteristics详解...

2019-01-27 23:43:36 9102 10

原创 自定义Camera系列之:GLSurfaceView + Camera

一、前言假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。这里介绍 GLSurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着旧的 Camer API 的。为什么选择 GLSurfaceView ?GLSurfaceView 继...

2019-01-23 00:08:12 4711 8

原创 Android Camera2 之 CaptureRequest 和 CaptureResult

CaptureRequest 介绍一、简介CaptureRequest 表示一个捕捉的请求。我们可以为不同的场景(预览、拍照)创建不同的捕捉请求,并可以配置不同的捕捉属性,如:预览分辨率,预览目标,对焦模式、曝光模式等等。官方文档链接:https://developer.android.com/reference/android/hardware/camera2/CaptureRequest...

2019-01-12 00:32:01 22045 9

原创 Android Camera2 之 CameraCaptureSession 详解

一、简介CameraCaptureSession 是一个事务,用来向相机设备发送获取图像的请求。主要为 setRepeatingRequest() 和 capture() 方法。setRepeatingRequest() 是重复请求获取图像数据,常用于预览或连拍,capture() 是获取一次,常用于单张拍照。CameraCaptureSession 类是一个抽象类,其直接的实现类为 Cam...

2019-01-08 23:57:57 25027 5

原创 Android Camera2 之 CameraCharacteristics 详解

一、简介CameraCharacteristics 是专门用来描述相机设备属性的一个类,继承自 CameraMetadata 类。给对给定的相机,它里面所包含的属性都是 固定的 。包括:曝光补偿(Exposure compensation)、自动曝光/自动对焦/自动白平衡模式(AE / AF / AWB mode)、自动曝光/自动白平衡锁(AE / AWB lock)、自动对焦触发器(AF t...

2019-01-07 00:08:40 29716 5

原创 Android Camera2 之 CameraDevice 详解

一、简介CameraDevice 是一个连接的相机设备代表,你可以把它看作为相机设备在 java 代码中的表现。类比于旧 API 中的 Camera 类。官方文档链接:https://developer.android.google.cn/reference/android/hardware/camera2/CameraDevice二、获取 CameraDevice 实例通过 Camera...

2018-12-29 17:59:59 14784 5

原创 Android Camera2 之 CameraManager 详解

一、简介CameraManager 是系统服务之一,专门用于 检测 和 打开相机,以及 获取相机设备特性。官方文档其实说的蛮清楚的了,英文好的同学也可以直接看官方文档把:https://developer.android.google.cn/reference/android/hardware/camera2/CameraManager二、获取 CameraManager 实例通过 Con...

2018-12-29 17:30:06 22701

原创 自定义Camera系列之:TextureView + Camera

一、前言上一篇介绍了 自定义Camera系列之:SurfaceView + Camera,接着我们介绍使用 TextureView + Camera 的组合。为什么选择 TextureView ?由于 SurfaceView 是拥有一个独立的 Surface,不在 View hierachy 体系中,因此不支持动画和截图,而 TextureView 则没有该限制。TextureView 是...

2018-12-26 22:11:13 6758 6

原创 自定义Camera系列之:SurfaceView + Camera

一、前言之前一直想把 Camera 系列的写一下,拖了很久,现在慢慢填坑吧。首先介绍 SurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着旧的 Camer API 的。为什么选择 SurfaceView ?SurfaceView 在自己独立的线程中绘制,不会影响到主线程,内部使用双...

2018-12-25 23:34:16 10342 7

原创 Android 性能优化总结

一、简介性能调优是开发中少不了的一个过程,同时也是一名优秀的程序员需要掌握的基本技能。下面我们来看一下在 Android 中可以从哪些方面来进行性能优化吧。二、内存优化内存是很重要的一个模块了,所以我也将其放在了第一位来说明。那么如何来优化我们应用的内存呢?当应用内存不足时,将发生内存溢出。内存溢出会直接导致应用 crash。尽量减少应用的内存使用将很好的避免发生内存溢出。我们可以从如下方...

2018-12-18 23:36:00 1691

原创 LeetCode : 567. 字符串的排列(Permutation in String)解答

567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False...

2018-12-17 22:51:37 3416 1

原创 智能指针之 shared_ptr 的使用

一、智能指针1. 什么是智能指针简单地说,C++智能指针是包含重载运算符的类,其行为像常规指针,但智能指针能够及时、妥善地销毁动态分配的数据,并实现了明确的对象生命周期,因此更有价值。2. 常规指针存在的问题C++在内存分配、释放和管理方面向程序猿提供了全面的灵活性。但是这种灵活性是把双刃剑,一方面它使C++成为一种功能强大的语言,另一方面它让程序猿能够制造与内存相关的问题,比如内存泄漏。...

2018-12-17 17:50:17 3069 1

原创 Android NDK 面试题汇总

一、谈谈你对 JNI 和 NDK 的理解JNI:JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。目的是使得 Java 与本地其他语言(如 C/C++)进行交互。JNI 是属于 Java 的,与 Android 无直接关系。NDK:NDK 是 Native Development Kit 的缩写,是 Android 的工具开发包。作用是更方便和...

2018-12-08 00:29:20 12514 4

原创 EGL 介绍和使用

一、简介EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁。二、功能EGL API 是...

2018-12-06 23:28:21 31238 5

原创 OpenGL ES 3.0 渲染管线介绍

一、前言OpenGL 1.x 系列采用的还是固定功能管线。从 OpenGL ES 2.0 开始采用了可编程图形管线。而 OpenGL ES 3.0 兼容了 2.0,并加入了很多 2.0 不具备的功能。Android 4.3 之后开始支持 OpenGL ES 3.0。二、渲染管线记住下面这张图,其中带阴影的方框表示 OpenGL ES 3.0 管线中可编程阶段。1. 顶点着色器...

2018-12-06 00:22:05 2385 2

原创 Android 为例编写一个 OpenGL ES 3.0 实例,Native & Java 两种实现

一、简介通过这个 Sample,你将了解到 Android 中是怎么使用 OpenGL ES通过绘制一个简单的静态三角形,来简单入门和了解它大致的流程(类似于 HelloWorld 工程)介绍使用 Native 层 和 Java 层 两种方式来分别实现本文暂不介绍具体的语法,但会给比较详细的注释和解释,帮助你理解二、Native 实现1. 头文件由于我们使用的是 OpenGL E...

2018-12-05 10:24:04 6479 4

原创 Android 进程通信 (IPC) 之 AIDL 的使用

一、简介AIDL 是 Android Interface Definition Language 的缩写,是 Android 定义的一种专门用于进程间通信的接口语言,它的语法也和 java 比较类似。二、特点我们知道 Android 中还有一种轻量级的进程通信方式——Messenger。Messenger 类似于一个进程间使用的 Handler,它适用于消息的传递,服务器只能以串行的方式一...

2018-11-28 23:42:36 1244

原创 LeetCode : 24. 两两交换链表中的节点(Swap Nodes In Pairs)解答

24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。一、分析图示:规律:交换过程基本就是:previou

2018-11-19 22:26:19 1035

原创 Linux 进程通信之:内存映射(Memory Map)

一、简介正如其名(Memory Map),mmap 可以将某个设备或者文件映射到应用进程的内存空间中。通过直接的内存操作即可完成对设备或文件的读写。.通过映射同一块物理内存,来实现共享内存,完成进程间的通信。由于减少了数据复制的次数,一定程度上提高了进程间通信的效率。二、API 说明1. 头文件#include <sys/mman.h>2. 创建内存映射void *mm...

2018-11-19 17:51:49 10941

原创 LeetCode : 48. 旋转图像(Rotate Image)解答

48. 旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:给定 matrix =[    [1,2,3],    [4,5,6], &nbsp...

2018-11-19 13:05:52 5258 5

原创 LeetCode : 13. 罗马数字转整数(Roman To Integer)解答

13. 罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗...

2018-11-17 17:59:32 333

原创 Linux 进程通信之:内存共享(Shared Memory)

一、简介共享内存允许两个进程访问同一块内存区域,它们使用同一个 key 值标记。二、特点优点:通信方便,两个进程也是直接访问同一块内存区域,减少了数据复制的操作,速度上也有明显优势。缺点:没有提供同步机制,往往需要我们使用其它(例如信号)等手段实现进程的同步工作。三、API 说明1. 头文件#include <sys/shm.h>2. 创建内存共享区int sh...

2018-11-17 14:59:11 8343 2

原创 Linux 进程通信之:命名管道 (FIFO)

一、简介由于管道(Pipe)只能应用于存在血缘关系的进程间通信,为了突破这个限制,使用命名管道(FIFO)来实现 不相干进程间 的通信。FIFO 是 Linux 基础文件类型中的一种,它并不占用磁盘上实际的数据块,而仅仅是标识内核中的一条通道。各进程可以打开这个文件进行 read/write,实际上是在读写内核通道。二、API 说明1. 头文件#include <sys/types...

2018-11-16 08:35:24 1000

原创 Linux 进程通信之:管道 (Pipe)

一、简介管道(pipe) 是一种最基本的 IPC(Inter Process Communication) 机制,优点是简单。二、特点:管道只适用于 存在血缘关系 的两个进程之间通信,因为只有存在血缘关系的两个进程之间才能共享文件描述符管道分为两端,一端读,一端写,有两个文件描述符分别表示读端和写端管道是单向的,数据从写端输入,从读端取出管道的本质是一个伪文件(实为内核缓冲区)管道...

2018-11-15 16:27:11 1103

原创 Android.mk 语法和变量介绍

一、简介Android.mk 是一种脚本语言,是将 C/C++ 源文件粘合至 NDK 的构建文件。官网对 Android.mk 的介绍:https://developer.android.com/ndk/guides/android_mk二、一些超级基本的语法例如我们使用 # 表示注释,使用 $() 表示取值,使用 := 表示赋值,使用 += 表示附加等等。在学习之前,我们起码得看得懂这...

2018-11-14 17:05:39 11325

原创 More Effective C++ 35个做法

前言最近在看《More Effective C++》这个书,自己 C++ 基础还是不行,有的地方看的有点懵,最后还是坚持看完了,做做笔记,简短的 记录一下有哪些改善编程与设计的有效方法。推荐还是可以买一本原书的,书中例子比较丰富,更容易理解一些。一、基础议题1. 仔细区别指针(pointer)和引用(reference)指针可以指向 null,引用不允许指向 null。指针可以重新被赋...

2018-11-13 11:32:29 2414

原创 灰度图(IR 图)转成 RGB 图预览,画面出现光斑/黄斑问题解决

一、背景存在一个 IR 图(红外线 Infrared Radiation),需要在页面上显示出来,IR 图片格式是 gray8,即 8 位的灰度图。Android 上的 Bitmap 图片格式使用的是 ARGB_8888,所以需要把灰度图转 ARGB 图,每个通道都为 8 位。二、问题现象转码思路很简单,就是一个 int 表示一个像素点,刚好是 4 * 8 = 32 位。那么每一位的值都...

2018-11-13 09:56:20 7441 1

原创 LeetCode : 43. 字符串相乘(Multiply Strings)解答

43. 字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1...

2018-11-09 08:29:43 4505 4

原创 LeetCode : 303. 区域和检索 - 数组不可变(Range Sum Query - Immutable)解答

303. 区域和检索 - 数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> ...

2018-11-06 11:01:26 680

原创 LeetCode : 743. 网络延迟时间(Network Delay Time)解答,有权最短路径问题

743. 网络延迟时间有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。现在,我们向当前的节点 K 发送了一个信号。需要多久才能使 所有节点(共 N 个节点)都收到信号?如果不能使所有节点收到信号,返回 -1。注意:...

2018-11-06 08:36:22 3146

原创 LeetCode : 866. 回文素数(Prime Palindrome)分析和解答

866. 回文素数求出大于或等于 N 的最小回文素数。回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。例如,2,3,5,7,11 以及 13 是素数。回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。例如,12321 是回文数。示例 1:输入: 6输出: 7示例 2:输入: 8输出: 11示例 3:输入: 13...

2018-11-04 22:53:12 4180 2

原创 LeetCode : 390. 消除游戏(Elimination Game)分析和解答

390. 消除游戏给定一个从1 到 n 排序的整数列表。首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。返回长度为 n 的列表中,最后剩下的数字。实例:输入:n = 9,1 2 3 4 5 6 7...

2018-11-03 18:37:25 5245 12

原创 LeetCode : 502. IPO 分析与解答

502. IPO假设 LeetCode 即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,LeetCode希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 LeetCode 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相...

2018-11-03 09:50:37 1278

sshdroid.apk

为Android设备开启一个SSH的服务,方便远程连接

2021-07-13

设计模式之禅第二版

《设计模式之禅 第2版》PDF资源。 本书是第2版, 在写作中吸取了读者对上一版的许多意见和建议, 修订了一些代码的变量、 类、 方法名称, 以更加符合自然语言; 删除了部分有争议的内容(如单例模式的垃圾回收问题) ; 修改了一些常用的名词, 确保与编程人员的习惯相匹配。 希望通过这些改进, 给读者提供一个更完美的设计模式盛宴, 弥补上一版中的诸多不足。

2018-06-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除