Jaqen's Blog

Jaqen's Blog

每周 ARTS 第 3 期
Algorithm描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1 输入: 121输出: true 示例 2 输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3 输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。 方法 不考虑转换为字符串。 数字本身反转对比,相同就是回文。但是反转后的数字可能出现溢出问题。 最优解是反转一半的数字,前一半与后一半的反转如果相同,就是回文。 关键在于如何确定反转数字的位数已经达到原...
YUV 格式详解
一般的视频采集芯片输出的码流一般都是 YUV 格式数据流,后续视频处理也是对 YUV 数据流进行编码和解析。所以,了解 YUV 数据流对做视频领域的人而言,至关重要。 在介绍 YUV 格式之前,首先介绍一下我们熟悉的 RGB 格式。 RGBRGB 分别表示红(R)、绿(G)、蓝(B),也就是三原色,将它们以不同的比例叠加,可以产生不同的颜色。 比如一张 1920 * 1280 的图片,代表着有 1920 * 1280 个像素点。如果采用 RGB 编码方式,每个像素点都有红、绿、蓝三个原色,其中每个原色占用 8bit,每个像素占用 24bit,也就是 3 个字节。 那么,一张 1920 *...
每周 ARTS 第 2 期
Algorithm整数反转描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 12输入: 123输出: 321 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 方法 求余运算即可得到最后一位数,但是在拼凑成反转整数时需要考虑到整数溢出问题。 1234567891011public int reverse(int x) { int rev = 0; while (x != 0) { int pop = x %...
使用 Camera 和 Camera2 采集视频数据
Android 中预览相机画面主要用 SurfaceView 和 TextureView。 SurfaceView:SurfaceView 是一个有自己 Surface 的 View。界面渲染可以放在单独线程而不是主线程中。它更像是一个 Window,自身不能做变形和动画。 TextureView:TextureView 同样也有自己的 Surface。但是它只能在拥有硬件加速层的 Window 中绘制,它更像是一个普通 View,可以做变形和动画。 更多关于 SurfaceView 和 TextureView 的知识可以看这篇文章 Android 5.0(Lollipop)中的Surf...
每周 ARTS 第 1 期
Algorithm1. 两数之和描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1] 方法 首先想到可能就是暴力法,遍历每个元素,查找是否存在一个值与 target - x 相等的目标元素。但是时间复杂度 为 O(n2)。所以可以考虑以空间换时间的方式。 采用哈希表...
使用 AudioTrack 播放 PCM 音频
AudioTrack 与 MediaPlayer 的对比播放声音可以用 MediaPlayer 和 AudioTrack,两者都提供了 Java API 供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。 其中最大的区别是 MediaPlayer 可以播放多种格式的声音文件,例如 MP3,AAC,WAV,OGG,MIDI 等。MediaPlayer会在 framework 层创建对应的音频解码器。而 AudioTrack 只能播放已经解码的 PCM 流,如果对比支持的文件格式的话则是 AudioTrack 只支持 wav 格式的音频文件,因为 wav 格式的音频文件大部分都...
使用 AudioRecord 采集音频
AudioRecord 详解首先看一下 Android 官方文档中对 AudioRecord 的概述: AndioRecord 类的主要功能是让各种 Java 应用能够管理音频资源,以便它们通过此类能够录制平台的声音输入硬件所收集的声音。此功能的实现就是通过 “pulling 同步”(reading读取)AudioRecord 对象的声音数据来完成的。在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取 AudioRecord 对象的录音数据。 AudioRecord 类提供的三个获取声音数据的方法分别是 read(byte[], int, int), read(sh...
使用三种不同的方式绘制图片
在 Android 平台上绘制一张图片,使用三种不同的 API,ImageView、SurfaceView、自定义 View。 ImageView 绘制图片这种方式较为普遍简单。 123ImageView imageView = findViewById(R.id.image_view);Bitmap bitmap = Util.getBitmapFromAssetsFile(this, "Jaqen.png");imageView.setImageBitmap(bitmap); SurfaceView 绘制图片SurfaceView 是 View 的一个子类,特点在于其实现了双缓冲技术...
Kotlin Koans 学习笔记
Kotlin Koans 是 Kotlin 官方推出的一系列 Kotlin 语法练习。 一共分为 6 个模块,每个模块若干任务,每个任务都有一系列单元测试,目标就是编码通过单元测试。 本文是在学习 Kotlin Koans 过程中将相关语法点做一个简单的记录。 IntroductionHello_World和大多数语言一样,第一个任务的名称就是 Hello World。这个任务很简单,就是要求 task0 函数返回一个字符串ok。 123fun task0(): String { return "OK"} Kotlin 中函数使用关键字fun声明,返回类型在...
Android 图片预览库封装
基于 PhotoView,增加手势旋转、拖动退出预览功能。 GitHub:PhotoViewEx 依赖在项目 build.gradle 中添加依赖 12345allprojects { repositories { maven { url "https://jitpack.io" } }} module 的 build.gradle 中添加依赖 123dependencies { implementation 'com.github.zywudev:PhotoViewEx:1.0.0' ...
avatar
Jaqen Ng