Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
//License from project: Open Source License 

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;

import android.util.Log;

import java.nio.ByteBuffer;

public class Main {
    private final static String TAG = "Helper";
    private static Context context;

    public static byte[] makeFontBitmap(String font, String code, int size, float[] arrayOfPos) {
        Log.v(TAG, String.format("makeFontBitmap called(Java): font=%s code=%s", font, code));
        Canvas c = new Canvas();
        Paint p = new Paint();
        //        Log.v(TAG, "get density");
        float density = context.getResources().getDisplayMetrics().density;
        Log.v(TAG, String.format("makeFontBitmap density: %f", density));
        p.setTextSize((float) size * density);
        p.setAntiAlias(true);

        Rect textBounds = new Rect();
        p.getTextBounds(code, 0, code.length(), textBounds);
        Log.v(TAG, String.format("makeFontBitmap textBounds: %d,%d,%d,%d", textBounds.left, textBounds.top,
                textBounds.right, textBounds.bottom));

        Rect textBoundsAxA = new Rect();
        String axa = String.format("A%sA", code);
        p.getTextBounds(axa, 0, axa.length(), textBoundsAxA);
        Rect textBoundsAA = new Rect();
        String aa = "AA";
        p.getTextBounds(aa, 0, aa.length(), textBoundsAA);

        // cache.distDelta = Vec2(0, 0);
        arrayOfPos[0] = textBounds.left;
        arrayOfPos[1] = textBounds.top;

        // cache.srcWidth = Vec2(16, 16);
        arrayOfPos[2] = textBounds.width();
        arrayOfPos[3] = textBounds.height();

        // cache.step = 16;
        //      arrayOfPos[4] = textBounds.width() + 1;
        arrayOfPos[4] = textBoundsAxA.width() - textBoundsAA.width();

        if (textBounds.width() == 0 || textBounds.height() == 0) {
            Log.v(TAG, "makeFontBitmap: empty");
            return null;
        }

        Bitmap b = Bitmap.createBitmap(textBounds.width(), textBounds.height(), Bitmap.Config.ARGB_8888);
        c.setBitmap(b);

        Rect r = new Rect(0, 0, textBounds.width(), textBounds.height());
        //      p.setColor(Color.RED);
        p.setARGB(0, 0, 0, 0);
        c.drawRect(r, p);
        p.setARGB(255, 255, 255, 255);

        //        Log.v(TAG, "makeFontBitmap: drawText");
        c.drawText(code, -textBounds.left, -textBounds.top, p);
        Log.v(TAG, String.format("makeFontBitmap: w=%.2f h=%.2f", arrayOfPos[2], arrayOfPos[3]));

        ByteBuffer buf = ByteBuffer.allocate(textBounds.width() * textBounds.height() * 4);
        //      ByteBuffer buf = ByteBuffer.allocate(b.getRowBytes());
        Log.v(TAG, String.format("makeFontBitmap: b.getRowBytes() %d", b.getRowBytes()));
        buf.position(0);
        b.copyPixelsToBuffer(buf);
        Log.v(TAG, String.format("makeFontBitmap results: capacity=%d", buf.capacity()));

        //      byte bytes[] = buf.array();
        //      for (int i = 0; i < size * size * 2; i++)
        //         bytes[i] = (byte)(Math.random() * 255);
        return buf.array();
    }
}