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

标签 java android opengl-es drawtext text-rendering

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

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

enter image description here

经过大量研究后,我决定通过将一串字符渲染为位图来实现这一点。我在实现这个过程中遇到了很多问题。我了解基本概念。我知道我需要字母数字字符“0123456789”和“XY”和“-”(用于 -x 和 -y 比例)。我见过很多不同的例子,并在此处广泛尝试遵循 JVitella 的例子 here

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

同样在 Jvitelas 示例中,我被代码惊呆了:

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

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

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

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

基本上我在问:

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

最佳答案

你问了很多问题,但我会尽量回答几个:

  • so how large should my bitmap be?

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

  • How would I draw single digit numbers from the bit map?

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

    例如,如果我想画一个 X,那么你在屏幕上画一个四边形,并将它的纹理坐标从 (0,0) 分配到 (0.2, 0.33),这会选择纹理的左 1/5,和纹理的底部 1/3。您会看到这样的框如何与纹理中“X”的位置对齐。

  • How would I draw numbers with more than one digit?

    您只需紧挨着画两个独立的个位数。


如果您的唯一目标是在 Android 中绘制文本,那么使用 FrameLayout 和层 TextViews 覆盖您的 GLSurfaceView< 可能会更容易。 OpenGL 不是为文本设计的,这使得它有些麻烦。

关于java - 如何将文本渲染为位图并绘制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654964/

相关文章:

java - 模拟一个具体的类——它总是空的

javascript - 如何在 Chrome 或 Firefox 浏览器上运行 javascript

android - 使用 HttpURLConnection 的 NTLM 身份验证

将 UIImage 转换为 OpenGL 的 CGImage 时,iOS PNG Alpha channel 是稳定的

ios - 如何在 iPhone 上渲染斜面多边形?

java - 确定我们的应用程序部署到哪个应用程序服务器?

java - 将我的数据库移动到 SD 卡不起作用

java - 修改Android中的compareTo

android - ListView 去不同的 Activity

ios - Scenekit 中自定义几何体的纹理坐标