Растровое изображение не сохранено правильно (из Android-холста) - PullRequest
2 голосов
/ 19 декабря 2011

Я немного изменил свой вопрос.

РЕДАКТИРОВАТЬ:

// 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

}

Теперь я использую этот код для создания текстур из заданного текста (это только частично). Но я обнаружил, что ошибка лежит где-то в создании растрового изображения. Теперь я сохраняю растровое изображение на SD-карте, чтобы посмотреть, как оно получилось, и обнаружил, что я получаю ВСЕ Cyan-растровое изображение (672B, 164x7 - размеры).

Кто-нибудь видит, почему он не создает растровое изображение с текстом на нем? Что я могу делать не так?

Ты будешь героем, если сможешь мне помочь:)

1 Ответ

1 голос
/ 26 декабря 2011

Во-первых, ваш расчет высоты текста неверен.Измерение «спуска» - это просто часть текста ниже базовой линии (то есть хвосты «g» и «q» и т. Д.).Правильная высота - подъем + спуск, за исключением того, что, поскольку подъем является отрицательным, вы хотите:

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

Во-вторых, когда вы используете drawText (), указанная вами координата y находится там, где проходит базовая линия, это не верхили нижний край.Поэтому, если вы хотите заполнить растровое изображение достаточно большим, чтобы вместить текст, ваша координата y также должна быть -p.ascent().

...