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

时间:2012-12-01 00:04:46

标签: 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创建到位图中。

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

基本上我在问:

  • 如何实现上面的以下位图?
  • 我如何从位图中绘制单个数字?
  • 如何使用多个数字绘制数字?

1 个答案:

答案 0 :(得分:2)

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

  •   

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

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

  •   

    如何从位图中绘制单个数字?

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

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

  •   

    如何使用多个数字绘制数字?

    您只需绘制两个相邻的独立单个数字。


如果您的唯一目标是在Android中绘制文字,则可能更容易使用FrameLayout,并TextViews覆盖GLSurfaceView。 OpenGL不是为文本设计的,这使得它有点麻烦。