如何将文本渲染为位图并绘制它

2024-04-08

我是 android 新手,我的小组目前正在使用 opengl es 2.0 使用 GlSurfaceView 创建图形应用程序。

我们最近在绘图上显示了网格和刻度线,现在我被分配了实现数字刻度并将 x 和 y 轴标记为“X”和“Y”的任务。

经过大量研究后,我决定通过将字符串渲染到位图来完成此任务。在实现这个目标的过程中我遇到了很多问题。我了解基本概念。我知道我需要字母数字字符“0123456789”和“XY”和“-”(对于-x和-y比例)。我见过很多不同的例子,并广泛尝试遵循 JVitella 的例子here https://stackoverflow.com/questions/1339136/draw-text-in-opengl-es-android

我开始理解这个概念,但就我的字符串而言,我知道我有 13 个字符,那么我的位图应该有多大?

同样在 Jvitelas 示例中,我对代码感到惊讶:

Drawable background = context.getResources().getDrawable(R.drawable.background);

我不明白到底发生了什么,当我编码时,我收到上下文语法错误。

对于我的应用程序,我知道我需要将字符串保存到位图中,就像这样。我会创建一个位图,但它应该有多大?然后我从位图创建一个画布,并将 canvas.drawText 创建到位图中。

  [ 0 1 2 3 4 ]
  | 5 6 7 8 9 |
  [ X Y Z     ]

基本上我要问的是:

  • 上面下面的位图如何实现?
  • 如何从位图中绘制个位数?
  • 如何绘制多于一位数字的数字?

你问了很多问题,但我会尝试回答一些:

  • 那么我的位图应该有多大?

    这完全取决于您,具体取决于您希望文本清晰的程度。您可以为每个字符分配一个具有数百个像素的巨大位图,可以很好地缩放,或者分配一个分辨率有限的非常小的位图。我想说,无论你想要什么“字体大小”,至少为每个字符分配那么多像素的高度。因此,如果您想绘制字体大小为“20”的内容,那么您可能需要 5x20 x 3x20 或 100x60 的位图。

  • 如何从位图中绘制个位数?

    您将使用 opengl 在要绘制字母的位置绘制一个四边形,然后使用该四边形的纹理坐标来选取一个字母。

    例如,如果我想绘制一个 X,那么您可以在屏幕上绘制一个四边形,并将其纹理坐标指定为从 (0,0) 到 (0.2, 0.33),这将选择纹理的左侧 1/5 和底部纹理的 1/3。您将看到这样的盒子如何与纹理中“X”的位置对齐。

  • 如何绘制多于一位数字的数字?

    您只需在彼此旁边绘制两个独立的个位数即可。


如果您唯一的目标是在 Android 中绘制文本,那么使用FrameLayout,和层TextViews超越你的GLSurfaceView。 OpenGL 不是为文本设计的,这使得它有些麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将文本渲染为位图并绘制它 的相关文章

  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • android 中camera.setParameters 失败

    我已将相机功能包含在我的应用程序中 我还在市场上推出了该应用程序 我从一位用户那里收到一条错误消息 称他在打开相机时遇到错误 我已经在 2 1 的设备上测试了该应用程序 我从用户那里得到的错误是使用 Nexus One 它主要运行 2 2
  • 如何从 Facebook 邀请好友到 Android 应用程序? - 给出错误

    我正在开发一个 Android 应用程序 我正在努力将 邀请朋友 功能添加到我的应用程序中 它转到我的AppLinkUrl成功但显示错误 我的清单代码如下
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 不显示 WRITE_EXTERNAL_STORAGE 的权限对话框

    I want to download a file using DownloadManager And DownloadManager wants to WRITE EXTERNAL STORAGE permission I have in
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • Android:确定 2.2 及更高版本上的摄像头数量

    我的应用程序需要在 Android 2 2 及更高版本上运行 我需要一种方法来确定可用摄像机的数量 有很多帖子解决了这个问题 但我找不到一个有效的 一种解决方案是简单地检测操作系统版本 任何 2 2 版本的设备都仅限于 1 个摄像头 即使该
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Android 布局 xml 文件中使用字符串格式参数 [重复]

    这个问题在这里已经有答案了 我在 String xml 文件中定义了一个使用格式参数的字符串 即
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 在状态栏下方显示DialogFragment内容

    我试图显示高度和宽度均具有 match parent 的 DialogFragment 但碰巧在顶部 DialogFragment 显示在 StatusBar 下方 DialogFragment 正在应用一些默认值来填充底部 右侧 左侧和顶
  • 如何以编程方式创建活动转换?

    我想以编程方式创建一个动画 以从触摸屏点启动具有缩放效果的活动 接下来我模拟缩放输入效果
  • Android ADT Eclipse 插件,parseSDKContent 失败

    我刚刚设置了我的第一个 Android 开发环境 其中包括 日食3 5 Mac OS X 10 5 适用于 x86 mac 的 Android SDK ADT Eclipse 插件 0 9 6 我已将 set PATH 设置为我的 SDK
  • 异步更新后更新Android Listview

    我正在将 HTTP 调用从同步调用转换为异步调用 由于连接在后台运行 因此当我最初设置列表适配器时 数据不存在 如何在 HTTP 调用后更新列表适配器 我尝试了一些方法 例如在数据发送回之前不设置适配器并再次设置适配器 但没有任何效果 这是
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐