我稍微改变了一下我的问题。
编辑:
// make textures from text
public static void createTextureFromText(GL10 gl, String text, String texName) {
Paint p = new Paint();
p.setColor(Color.GREEN);
p.setTextSize(32 * getResources().getDisplayMetrics().density);
// get width and height the text takes (in px)
int width = (int) p.measureText(text);
int height = (int) p.descent();
// Create an empty, mutable bitmap based on textsize
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
// get a canvas to paint over the bitmap
Canvas canvas = new Canvas(bmp);
bmp.eraseColor(Color.CYAN); //Cyan for debugging purposes
//draw the text
canvas.drawText(text, 0, 0, p);
// save image - for debugging purposes
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
// create a new file name "test.jpg" in sdcard
File f = new File(Environment.getExternalStorageDirectory() + File.separator + "test.jpg");
try {
f.createNewFile();
// write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
.... make texture
}
我现在使用此代码从给定文本创建纹理(这只是部分)。 但我发现错误位于Bitmap创建的某个地方。我现在将位图保存在SD卡上,看看结果如何,发现我得到了一个全青色位图(672B,164x7是尺寸)。
有人知道为什么它不会创建带有文字的Bitmap吗?我能做错什么?
如果你可以帮助我,你将成为英雄:)
答案 0 :(得分:1)
首先,您的文本高度计算错误。 “下降”测量只是基线下方文本的一部分(即“g”和“q”等的尾部)。正确的高度是上升+下降,除非因为上升是负的,你想要:
int height = (int) (p.descent() + -p.ascent());
其次,当你绘制文本()时,你给它的y坐标就是基线所在的位置,它不是顶边或底边。因此,如果您想要填充一个足以容纳文本的位图,您的y坐标也应该是-p.ascent()
。