Android Opengl es 写字 笔记
转载自:http://blog.csdn.net/li6185377/article/details/7255809
由于Opengl 本身是没有DrawString 这种函数的 所以我们要实现最简单的办法 字写在图片上 在把图片转为Texture 进行绘图
下面是我封装好的类
- package ljh.opengl.command;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Vector;
- import ljh.opengl.GLEx;
- import ljh.opengl.LColor;
- import ljh.opengl.LTexture;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Bitmap.Config;
- import android.graphics.Paint;
- public class GLFont {
- //要打印的字 字体大小 字的信息 最大宽度
- public static Bitmap getImage(String str, int fontsize, Paint paint,
- int maxWidth) {
- String[] text = StringFormat(str, maxWidth, fontsize);
- int[] count = getLinesMaxLength(text);
- Bitmap bitmap = Bitmap.createBitmap(count[0] * (fontsize / 2)
- + count[1] * fontsize +5, (text.length) * fontsize,
- Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- paint.setTextSize(fontsize);
- for (int i = 0; i < text.length; i++) {
- canvas.drawText(text[i], 0, (i+1) * fontsize -3, paint);
- }
- return bitmap;
- }
- //具体的方法 还好我们前面实现了DrawTexture 我们这边就不用多写一次了
- public static void drawString(GLEx gl, String str, float x, float y,Paint paint,int maxWidth) {
- if(str==null||str.trim()=="")
- return;
- String key = str.trim().toLowerCase();
- LTexture texture = data.get(key);
- if(texture==null)
- {
- Bitmap bitmap = getImage(str, (int)paint.getTextSize(), paint, maxWidth);
- texture = new LTexture(bitmap);
- data.put(key, texture);
- }
- gl.drawTexture(texture, x, y);
- }
- //保存着写过的字的纹理 当渲染到一定次数 还没使用的将被销毁
- public static HashMap<String, LTexture> data = new HashMap<String, LTexture>();
- //保存要销毁的纹理
- private static ArrayList<String> UnusedList = new ArrayList<String>();
- //渲染线程没运行一次 次函数运行一次
- public static void update()
- {
- for(String key:data.keySet())
- {
- LTexture texture = data.get(key);
- if(texture.isUnused())
- {
- UnusedList.add(key);
- }
- else
- {
- texture.addUnused();
- }
- }
- for(String key:UnusedList)
- {
- GLEx.glex.delete(data.remove(key));
- }
- UnusedList.clear();
- }
- /**
- * 返回字数最多的那个行中中英文的数量
- *
- * @param lines
- * @return int[0] 英文的数量 int[1] 中文的数量
- */
- public static int[] getLinesMaxLength(String[] lines) {
- int max = 0, index = 0;
- for (int i = 0; i < lines.length; i++) {
- if (max < lines[i].getBytes().length) {
- max = lines[i].getBytes().length;
- index = i;
- }
- }
- int[] count = new int[2];
- for (int i = 0; i < lines[index].length(); i++) {
- if (lines[index].charAt(i) > 255) {
- count[1]++;
- } else {
- count[0]++;
- }
- }
- return count;
- }
- //对String 进行分段
- public static String[] StringFormat(String text, int maxWidth, int fontSize) {
- String[] result = null;
- Vector<String> tempR = new Vector<String>();
- int lines = 0;
- int len = text.length();
- int index0 = 0;
- int index1 = 0;
- boolean wrap;
- while (true) {
- int widthes = 0;
- wrap = false;
- for (index0 = index1; index1 < len; index1++) {
- if (text.charAt(index1) == '\n') {
- index1++;
- wrap = true;
- break;
- }
- widthes = fontSize + widthes;
- if (widthes > maxWidth) {
- break;
- }
- }
- lines++;
- if (wrap) {
- tempR.addElement(text.substring(index0, index1 - 1));
- } else {
- tempR.addElement(text.substring(index0, index1));
- }
- if (index1 >= len) {
- break;
- }
- }
- result = new String[lines];
- tempR.copyInto(result);
- return result;
- }
- }
Android Opengl es 写字 笔记相关推荐
- OpenGl文章
Android OpenGL ES 简明开发教程
Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...
- Android OpenGL ES 从入门到精通系统性学习教程
1 为什么要写这个教程 目前这个 OpenGL ES 极简教程的更新暂时告一段落,在此之前,很荣幸获得了阮一峰老师的推荐. 因为在工作中频繁使用 OpenGL ES 做一些特效.滤镜之类的效果,加上平 ...
- Android OpenGl Es 学习(二):定义顶点和着色器
概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...
- android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...
源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...
- Android OpenGL ES 开发教程(20):颜色Color
OpenGL ES 支持的颜色格式为RGBA模式(红,绿,蓝,透明度).颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0-1之间的浮点数 ...
- Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换
Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义.对于同一个坐标变换,可以使用不同的方法来 ...
- Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos. 使用Eclipse 创建一个Android项目 Project Name: OpenGLDemos ...
- Android OpenGL ES视频渲染(一)GLSurfaceView
相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
最新文章
- 经常使用的npm命令
- swim 中一行代码解决收回键盘
- Java中Connection方法笔记
- Eclipse内存分析工具的用法
- CodeForces - 1368F Lamps on a Circle(交互+贪心)
- 周末,说声php的settergetter(魔术)方法,你们辛苦了
- 带您探究云存储的奥秘,三分钟帮您快速了解OSS
- 澄海哪里学机器人编程_少年学机器人编程
- 使用python脚本定时备份web网站
- 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
- 互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)
- 易捷web文件服务器软件,易捷在线文件管理系统
- 摩拜免押金是在阿里的哈罗猛烈攻击下的应对举措
- Codeforces Round #643 (Div. 2)——B. Young Explorers
- Spring Data JPA 查询方法的命名语法与参数
- 懒出天际--语音鼠标,解放双手,靠嘴使唤鼠标。SAPI语音识别,WINAPI鼠标消息
- Python社区医疗服务平台的设计与实现毕业设计源码221707
- Mysql查询历史SQL执行记录
- EDA软件常用技巧-SCL配置
- [IC笔试题] FIFO深度计算