位图未正确保存(来自Android的Canvas)

时间:2011-12-19 14:56:51

标签: android opengl-es canvas fonts bitmap


我稍微改变了一下我的问题。

编辑:

// 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吗?我能做错什么?

如果你可以帮助我,你将成为英雄:)

1 个答案:

答案 0 :(得分:1)

首先,您的文本高度计算错误。 “下降”测量只是基线下方文本的一部分(即“g”和“q”等的尾部)。正确的高度是上升+下降,除非因为上升是负的,你想要:

int height = (int) (p.descent() + -p.ascent());

其次,当你绘制文本()时,你给它的y坐标就是基线所在的位置,它不是顶边或底边。因此,如果您想要填充一个足以容纳文本的位图,您的y坐标也应该是-p.ascent()