自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weiersyuan的专栏

做人如果没有梦想跟咸鱼有什么区别

  • 博客(95)
  • 资源 (8)
  • 收藏
  • 关注

原创 mac下强迫症安装python小坑

有洁癖的强迫症真难受啊。。。 我以前在mac上使用python的时候就是使用homebrew单独安装了一个python来使用的,突然间今天下午强迫症来了,觉得有两个python的2.7版本不舒服,要是一个2.7的一个3.x的还可以接受啊。我就想着把使用homebrew安装的python2.7卸载了,使用系统自带的python2.7的版本。想法虽好,经过小半会的卸载后,使用easy_install安

2017-02-09 21:05:52 4333

原创 利用EGL在android上使用C/C++写OpenGL ES程序

使用Native代码GLSurfaceView在Java层使用EGL在native层使用EGL很多教程都是在C/C++写的OpenGL的代码,其中有很多优秀的框架,除了前面提过的Assimp库外,还有很强大的库glm,从另外一个角度来看,在学习EGL的时候,很多的资料都是C语言的代码,我在android上写OpenGL ES的代码似乎从来没见过那些代码,不使用一下总觉得缺少点什么。事实上,An

2016-11-30 23:37:30 14860

原创 AndroidStudio使用NDK配置方法

配置Gradle生成so编译多个模块关联Androidmk到Gradle使用cmake配置Gradle生成so在AndroidStudio2.1及以前我是通过下面的方式配置NDK的,不知道是从哪个版本开始的,我第一次在AS上使用NDK的时候用的就是AndroidStudio2.1了。首先在gradle.properties里面添加android.useDeprecatedNDK = true

2016-11-21 17:28:11 15457 8

原创 利用OpenGL ES进行Android手游录屏研究

前面在Android5.0录屏方案中研究过关于手机录屏直播直播的问题,只是使用系统自带的API需要21以上,大部分手游引擎底层封装一般都是opengl es,这篇博客继续研究这个问题,实现使用opengl es录制手机屏幕,希望在手游录屏方面有所作用。依前面在OpenGL ES 帧缓冲对象(FBO):Render to texture中使用的例子为例,就当它是一个游戏,录屏的相关接口我封装到一个库里

2016-11-18 12:16:38 4852 1

原创 OpenGL ES EGL介绍

前面已经在android平台上使用OpenGL ES的API了解了如何创建3D图形已经使用FBO渲染到纹理进行一些其他的操作,起初我学习OpenGL ES的目的就是为了研究Android平台上录制屏幕的方案。到目前为止,基础知识已经具备了,还差一点需要了解的是Embedded Graphics Library (EGL),EGL是连接OpenGL ES和本地窗口系统的接口,由于OpenGL ES是跨

2016-11-16 18:03:52 10453 1

原创 OpenGL ES 帧缓冲对象(FBO):Render to texture

帧缓冲对象FBO创建帧缓冲对象纹理附着渲染缓冲对象附着渲染到纹理Render to Texture渲染到深度纹理帧缓冲对象FBO渲染管线的最后一个阶段是到帧缓冲区。前面学习的好多知识所做的渲染操作都是在默认的帧缓冲中进行的,这个默认的帧缓冲是我们创建一个Surface时自动创建和配置好的,这篇博客就创建我们自己的缓冲区而不使用系统提供的缓冲区,这样就有了另一种渲染方式,默认情况下,我们使用

2016-11-15 00:26:48 12592 6

原创 OpenGL ES 加载3D模型

前面绘制的矩形、立方体确实确实让人看烦了,并且实际生活中的物体是非常复杂的,我们不可能像前面哪样指定顶点来绘制,因此本篇博客就说明通过OpenGL ES加载一个3D模型。这样复杂物体的设计工作就可以交给专业的设计师来做了,进行3D建模的工具比如3dmax、maya等。设计师通过这些软件构建出来漂亮的3D模型,并且可以通过软件导出有关该模型的各种数据信息文件,比如顶点坐标,法向量,纹理坐标等信息。模型

2016-11-07 23:23:52 6802

原创 OpenGL ES 片元操作

剪裁测试模板测试深度测试混合片元着色器后续操作还包括剪裁测试、模板测试、深度测试、混合等,最终才会被送到帧缓冲区。剪裁测试剪裁测试可以在渲染时用来限制绘制区域,通过制定一个矩阵进一步限制帧缓冲区可以写入的像素,启用剪裁测试后,绘制不会在整个屏幕(帧缓冲区)进行,而是在指定的矩形区域进行。不在矩形区域中的片元被丢弃,在矩形区域内的片元才能被送往帧缓冲区,实际效果就是在屏幕上开辟了一个小窗口。剪裁

2016-11-05 20:37:35 2525

原创 OpenGL ES 纹理设置

纹理过滤纹理采样最近点采样线性纹理采样MIPMAP纹理纹理过滤纹理拉伸:重复拉伸和截取拉伸用于指定纹理坐标超过(00.0,1.0)范围时所发生的行为,使用glTexParameterf函数指定,GL_TEXTURE_WRAP_S 定义 s 坐标超出范围[0.0, 1.0]的情况,GL_TEXTURE_WRAP_T 设定 t 坐标。GL_REPEAT 重复纹理,超过1的部分其实只看它的小数

2016-10-31 15:10:19 2252

原创 OpenGL ES 纹理

纹理概念纹理对象和纹理加载应用纹理的例子使用前面学过的技术已经可以利用OpenGL ES构建立体图形,并通过顶点着色器和片元着色器对其进行各种变化呢和光照等效果使得三维效果更加真实,实际上我看看到很多的3D游戏漂亮多了,那是因为有各种各样的漂亮的图像带给人很多视觉盛宴,这篇文章在前面的基础上,增加物体的表面贴图,使得物体更加好看。纹理概念纹理用来表示图像照片或者说一系列的数据,使用纹理可以使物体

2016-10-27 16:44:45 2347 1

原创 OpenGL ES 光照效果

一个立方体光照模型环境光散射光镜面光为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样的颜色混在一起,看不出来是否是立方体。并且添加上转动旋转功能,这样转动起来立体感更强一些。一个立方体立方体类Rectangle.javapublic class Rectangle { priv

2016-10-24 22:54:53 3631 2

原创 OpenGL ES 矩阵变换及其数学原理

矩阵变换及其数学原理引子推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下向量刻画的是线性空间中的对象。矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似矩阵本质上就是同一个线性变换的不同的描述。在一个线性空间中,选定了一组基,对于任何一个线性变化都可以用一个确定的矩阵来描述矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述,作为变换的矩阵,不

2016-10-24 10:41:35 3771 2

原创 OpenGL ES 透视投影

图元装配剪裁坐标透视除法视口变换利用w分量产生三维效果透视投影透视投影背后的数学原理透视投影例子前面我们知道了一个顶点要想显示到屏幕上,它的x、y、z分量都要在[-1,1]之间,我们回顾一下渲染管线的图元装配阶段,它实际上做了以下几件事:剪裁坐标、透视分割、视口变换。图元装配的输入是顶点着色器的输出,抓哟是物体坐标gl_Position,之后到光栅化阶段。图元装配剪裁坐标当顶点着色器写

2016-10-23 21:09:03 3947

原创 OpenGL ES 正交投影

OpenGL ES 正交投影OpenGL ES 正交投影绘制正方形引入投影正交投影背后的数学摄像机设置视口绘制正方形在最开始绘制的六边形里面好像看起来挺容易的,也没有出现什么问题,接下来不妨忘记前面绘制六边形的代码,让我们按照自己的理解来绘制一个简单的正方形。按照我的理解,要想在屏幕中间显示一个正方形,效果如下图所示应该创建的数据如下图所示即传给渲染管线的顶点数据如下图:float[] v

2016-10-23 15:59:14 6218 1

原创 OpenGL ES 着色器

OpenGL ES 着色器OpenGL ES 着色器着色器语言向量矩阵向量和矩阵的分量采样器数组类型转换变量限定符varying变量的原理获取着色器变量内建变量顶点着色器片元着色器函数片元着色器浮点变量精度着色器程序1.着色器语言着色器语言是一种高级图形编程语言,和C/C++语言很类似,但存在很大差别,比如,不支持double,byte,short,不支持unin,e

2016-10-22 21:36:31 2206

原创 OpenGL ES入门

OpenGL ES渲染管线概述渲染管线一般是由显示芯片GPU内部处理图形信号的并行处理单元组成,这些并行处理单元之间是独立的,从另一个角度看,渲染管线实际上也是一系列绘制过程,这一系列过程的输入是待绘制物体的相关描述信息,输出的是要显示的图像帧数据。OpenGL ES管线主要包括:读取顶点数据—>顶点着色器—>组装图元—>光栅化图元—>片元着色器—>写入帧缓冲区—>显示到屏幕上读取顶点数据指的是将

2016-10-22 16:56:08 2578 2

原创 Android5.0录屏方案

导语 本文主要是围绕android直播助手的功能做了一些研究,因为之前对Android多媒体相关的内容知之甚少,只有概念,于是查阅了相关资料并做以总结。由于我对音视频相关知识零基础所以补充了一些相关知识视音频编解码技术零基础学习方法视音频数据处理入门:RGB、YUV像素数据处理采集音频原始数据---->压缩编码----> 封装采集视频原始数据---->压缩编码----> 封装音视频编码

2016-08-08 14:19:37 7981 4

原创 Android点阵屏效果的控件

最近发现了一个比较好玩的效果,android实现的LED点阵屏幕效果,挺有意思的,于是花了点时间实现了一下,这个用在演唱会上的粉丝当成牌子举是不是挺好的呢,或者是送给妹子?哈哈~实现思路比较简单,主要是计算汉字对应的点阵矩阵,汉字通过GB2312编码,每个汉字对用两个byte来表示,而一个汉字被存储为点阵时,以16*16表示,需要16*16=256bit,也就是32byte,GB2312编码也

2016-06-25 10:50:14 4137 3

原创 Android绘制View相关的几个问题

前面关于View绘制的话题好像零散的写过博客,虽然好久没有认真的研究一些东西了,平时忙其他的东西,但是本着每个月必须花几天时间看看android的想法,今天整理了几个View绘制相关的问题,这里不会涉及View测量布局绘制的那部分细节,因为这些前面已经写过了。主要有以下几个问题1.View绘制流程 invalidate/requestLayout2.View树和DecorView4.真

2016-06-21 10:50:19 4639

原创 AndroidStudio导入第三方开源库

AndroidStudio还是0.8的版本的时候下载下来看了一下,都推出三年左右的工具了,我竟然没有用过,昨天打算好好研究一下以便以后转向AS,毕竟google出的这么好的IDE,不用都对不起自己。不过真心很好用,尤其黑色的主题风格很舒服,但对于一直使用eclipse的我还是有点不习惯,主要是导包的方式和eclipse差异是在很大,于是在网上各种搜索,研究了很久才弄明白,根据别人的资料加上自己的理

2016-05-24 15:33:57 4968 1

原创 最近面试Android的一些面试题

最近一个多月面试过一下公司(均为实习): 腾讯:内推一面卒。正式校招拿到offer 阿里:内推二面卒。 蘑菇街:面完三面技术面,等待HR面 网易:拿到offer。 可以看到,大部分问题不难,但是能回答对和回答的好不好又是两个两个不同的情况了。任何问题都尽量回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。 比如问一下内存泄露,那么试着多列举一些情况: 首先解释内存泄露是什么

2016-04-22 15:22:27 5800 5

原创 Android动态加载Activity原理

加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的。首先不得不了解一下activity的启动流程,当然只是简单的看一下,太详细的话很难研究清楚。通过startActivity启动后,最终通过AMS进行跨进程回调到Applica

2016-04-07 18:18:01 13532 6

原创 Android动态资源加载原理和应用

动态加载资源原理通常我们调用getResources()方法获取资源文件public Resources getResources() { return mResources;}mResources是在创建ContextImp对象后的init方法里面创建的mResources = mPackageInfo.getResources(mainThread);调用了Loade

2016-04-05 20:45:54 10418 5

原创 利用DexClassLoader动态加载dex文件

Java中也有类加载器ClassLoader,其作用是动态装载Class文件,当我们从网络下载Class文件,或者在编译时不参与而在运行时动态调用时就需要用类加载器。由于Android对class文件进行了重新打包和优化,最终APK文件中包含的是dex文件,加载这种文件就需要用到DexClassLoader。DexClassLoader(dexPath, optimizedDirectory,

2016-04-05 15:50:12 4410

原创 简单说Binder(2)

几个问题接着上一篇的内容,本片博客讨论几个问题1.跨进程传递IBinder对象的情形2.跨进程回调3.分析Toast的显示过程:跨进程回调的例子跨进程传递IBinder对象的情形会不会觉得传递IBinder有点奇怪呀?Binder机制不是用来做进程间通信的吗,那传递IBinder是为了干啥呢?没错,通信可以是双向的呀,Process A和Process B通信,进程A作为客

2016-02-23 20:45:23 2327 3

原创 简单说Binder(1)

Binder算是Android中比较难懂的一部分内容了,但是非常的重要,要想研究Framework层无论如何也绕不开Binder。网上也有很多讲解Binder的文章,有的很深入涉及到底层C层面,理解起来难度较大,要完全理解还需要Linux驱动的知识,看了还也是似懂非懂,我认为也不需要理解那么深入。写这篇博客主要是我从最学习理解Binder的过程的角度出发,也来谈谈Binder。Binder是什

2016-02-20 01:29:12 7631 12

原创 硬盘缓存方案DiskLruCache源码解析

硬盘缓存方案DiskLruCache前面研究了LruCache,它作为现在用的最多的内存缓存方案已经在很多开源缓存框架中使用,同样的还有硬盘缓存方案也就是DiskLruCache。它的大致用法如下存储:DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxS

2016-02-18 21:00:35 5071

原创 从HashMap到LruCache的源码分析

android的图片加载库Android-Universal-Image-Loader中的缓存策略,内存缓存LruCache,是一个最近最少使用算法LRU。前几天看操作系统也看到了LRU算法,是用在缺页中断发生时,进行置换算法才用的一种。缓存中的LruCache和操作系统中的页置换算法思想是一样的,于是心血来潮,决定把这部分实现看看,然后就有了这篇博客,从HashMap的实现到LinkedHash

2016-01-07 00:43:15 2900 3

原创 2015总结与思考

昨天晚上出去和几个朋友交流了一下,聊了很多,思考了一下这一年学习技术的经历,趁着在宿舍养病,将自己的想法记录了下来。总结过去与思考从开始决定当码农到现在将近两年零三个月,起初是因为自己专业的科研不是自己想象中的那样,加之对程序员的羡慕和崇拜,于是就走上了码农的不归路。作为非科班出身的学生,和计算机院的学生比起来有先天的劣势,例如好多的基础课程未学习、周围的编程氛围太差等等,然而事实上:正是

2015-12-13 23:13:01 4344 9

原创 java class文件结构

看了一周深入理解java虚拟机了,今天看到第六章,最近一直处在接受新知识的快感之中,不由得感慨基础知识的重要性,学起来相当过瘾!类文件结构这部分实践性较强,对于分析java代码有很重要的帮组,于是有做点笔记的必要了,在参考书的基础上,将一段代码的字节码完全解析了一遍。class文件的结构如下ClassFile { u4 magic; u2 minor_version; u2 majo

2015-12-11 17:44:10 2270

原创 Unix中的I/O模型和Java NIO

Unix网络编程中的五种I/O模型阻塞式I/0、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O以一个网络输入为例,一个输入操作通常包括两个不同的阶段:等待数据准备好,将数据从内核拷贝到进程中。具体过程参考下面的图。阻塞式I/O默认情况下的I/O模型都是阻塞式I/O,应用进程从调用recvfrom开始到它返回的整个时间段内都是被阻塞的。此也就是说,应用程序进程

2015-12-06 18:47:44 2801 1

原创 Java NIO传输文件

首先请确保已经学习了Java NIO的基础知识,包括Buffer,Channel文件通道和Socket通道,Selector。关于NIO比起I/O的好处,区别等这里就不说了。具体可以参考后面的参考链接等。这篇博客主要以一个使用NIO传输文件的例子来学习NIO中网络的基本操作传统的监控socket方式存在的问题传统的监控多个socket的Java解决方案是为每个socket创建一个线程并

2015-12-01 18:32:21 6672 1

原创 排序算法学习总结

排序算法学习总结排序算法在经典算法里面是非常重要的,于是花了点时间将之前学习的常见的排序算法进行总结。对于每种排序算法,需要理解以下问题:1.算法思想是什么2.时间复杂度3.稳定性4.什么情况下适用?基于比较的排序,已证明,基于比较的排序算法时间复杂度不会低于O(nlgn)最好的情况能达到这个下限,包括:插入排序/希尔排序/选择排序/堆排序/冒泡排序/归

2015-11-20 16:09:44 1978 5

原创 【算法】桶排序

桶排序桶排序(Bucket Sort)假设输入数据服从均匀分布,然后将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别排序,对每个桶再使用其他的排序算法,最后将每个桶中的数据有序的组合起来。前面了解到基数排序假设输入数据属于一个小区间内的整数,而桶排序则是假设输入是由一个随机过程生成,该过程将元素均匀的分布在一个区间[a,b]上。由于桶排序和计数排序一样均对输入的数据进行了某些假设限制,

2015-11-19 13:18:59 11123 1

原创 【算法】希尔排序

希尔排序希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。他是通过比较相距一定间隔的元素来工作,各趟比较所用距离随着算法的进行而减小,直至只比较相邻元素的最后一趟排序,因此也称递减增量排序算法。直接插入排序在当序列恰好为顺序时,时间消耗为O(n),因此若某个序列已基本有序,直接插入排序的效率就会提高。希尔排序使用一个序列h1,h2...ht的增量序列,只要h1=1,任何

2015-11-19 13:18:38 1453

原创 【数据结构】平衡二叉树之AVL树

平衡二叉排序树平衡二叉排序树(Balanced Binary Sort Tree),上一篇博客【数据结构】二叉排序树BST讲了BST,并且在最后我们说BST上的操作不会超过O(h),既然树高这么重要,那么BBST的研究就是为了使得树的深度在可接受的范围内渐近意义下达到O(lgn)n个节点组成的二叉树,其高度为lgn取下限时,这棵树是理想平衡的,满足这样条件的树只有完全二叉树和满二叉树,这样

2015-11-16 19:57:12 3464

原创 【数据结构】二叉排序树BST

二叉排序树二叉排序树(Binary Sort Tree)也叫二叉搜索树(Binary Search Tree)二叉排序树本质上还是一个二叉树,只不过在其上定义了一些规则:一个结点的左子树中所有的结点不大于该结点的值,而其右子树中的所有结点不小于该结点的值。由此规则可得BST中序遍历是有序的。BST中定义的操作有:minNode:某个子树中的关键字最小的结点maxNode:某个子

2015-11-14 11:20:21 2663

原创 【数据结构】二叉树

前言数据结构还是大二的时候学过的,当然由于是非计算机专业的学生,所以学的也不怎么样,去年用c++实现了最基本的数据结构,链表/栈/队列/二叉树,三月份看的时候还贴到了博客上。然而当时由于代码量不够,其实写的并不是很好,理解也太不到位。最近在看算法导论,当然最基本的就是数据结构,于是打算将基本的知识在回顾一下。我是一个疯狂的人,一旦决定做一件事,就会全天埋头去干,因为总有一种恨不得赶快学

2015-11-13 19:01:51 3123 5

原创 【算法】堆排序

堆排序上一篇博客讲了堆这种数据结构,它提供了一种接口getMax接口,好消息是获得最大值的时间复杂度仅仅为O(1),删除最大值delMax也仅仅需要O(lgn)的时间(删除后需要调整至满足堆的性质需要O(lgn)),因此联想到之前的选择排序算法,每次从剩下的未排序元素中找到极值元素,将其放入对应的位置。由于一般的选择排序在寻找最大值时需要遍历数组,遍历数组的复杂度为O(n),因此造成了时间

2015-11-12 12:45:35 179

原创 【数据结构】堆

堆这种数据结构。一般堆用来实现优先级队列。优先级队列:和通常的栈和队列一样,只不过里面的每个元素都有一个“优先级”,在处理的时候,首先处理优先级最高的。通常包含三个操作getMax/delMax/insert栈和队列算是优先级队列的特例。使用其他数据结构均不能同时在O(lgn)的复杂度下完成。至少有一种操作要耗时O(n).比如链表的插入操作O(1),但是获取最大值必须遍历链表O(N)。

2015-11-12 10:27:37 2171

动态加载activity

参考博客 http://blog.csdn.net/cauchyweierstrass/article/details/51087198

2016-04-07

Android动态加载资源示例代码

对应博客http://blog.csdn.net/cauchyweierstrass/article/details/51067729的代码

2016-04-05

sweet-alert-dialog的eclipse版本

对应博客http://blog.csdn.net/cauchyweierstrass/article/details/46335143的库工程eclipse版本

2015-06-02

测试动平移和旋转动画的参数Demo

对应博客的测试代码,测试动平移和旋转动画的参数Demo

2014-12-01

Android加载各种类型布局的宽高参数

测试加载各种类型布局的宽高参数的Demo和ListView添加头视图为相对布局的Demo。

2014-11-28

android apk 反编译工具包- AntiDroid

可以方便的反编译,包含apktool(资源文件获取)dex2jar(源码文件获取)jd-gui (源码查看)并且是图形化界面的,方便使用。

2014-11-14

文件改名的批处理工具,可以对很多的文件进行统一改名

文件改名的批处理工具,可以对很多的文件进行统一改名

2014-11-13

ut屏蔽校外v4

提供限制IPV4流量的方法,这个可以完全屏蔽UT走IPv4的流量。

2012-08-12

空空如也

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

TA关注的人

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