2

私はここで何が間違っているのか疑問に思っています。

1080x1080の寸法のビットマップを作成します。

Bitmap level = Bitmap.createBitmap(1080, 1080, Config.ARGB_8888);

次に、いくつかの線を描画してそこに修正し、SurfaceViewのキャンバスに配置します。

c.drawBitmap(LevelBitmap.level, 0, 0, null);

この操作は私のグーグルTVNSZ-GS7で20msかかります。ずっと長い。

surfaceCreatedのpixelformatをRGBX_8888またはRGBA_8888に設定すると、さらに悪化し、描画に30ミリ秒かかります。

holder.setFormat(PixelFormat.RGBX_8888);

RGB_888に設定

holder.setFormat(PixelFormat.RGB_888);

何かを描くとnullpointerexceptionsにつながります

ビットマップのConfig.RGB_565とウィンドウのPixelFormat.RGB_565の組み合わせのみが、許容可能な10ミリ秒でビットマップをキャンバスに描画しますが、RGB_565の品質はひどいものです。

私は何かが足りないのですか?Google TVは32ビットグラフィックスに対応していませんか?その「自然な」ピクセルおよびビットマップ形式は何ですか?私がグーグルで見逃したこのトピックに関するドキュメントはありますか?

ここで私がタイミングを測定するために使用する私の要求されたonDrawメソッド:

private static void doDraw(Canvas c) {

        if (LevelBitmap.level == null){
            LevelBitmap.createBitmap();
        }

        long time = System.currentTimeMillis();
        c.drawBitmap(LevelBitmap.level, 0, 0, null);
        Log.e("Timer:",""+(System.currentTimeMillis()-time) );
        if(true) return;

ここで、ビットマップを作成するクラス:

public final class LevelBitmap {

    public static Bitmap    level;

    public static void createBitmap() {
        level = Bitmap.createBitmap(GameViewThread.mCanvasHeight, GameViewThread.mCanvasHeight, Config.ARGB_8888);

        Canvas canvas = new Canvas(level);

        canvas.scale(GameViewThread.fieldScaleFactor, GameViewThread.fieldScaleFactor);
        canvas.translate(500, 500);

        // floor covering
        int plankWidth = 50;
        int plankSpace = 500;
        short size = TronStatics.FIELDSIZE;
        for (int i = plankSpace; i < size; i = i + plankSpace) {
            canvas.drawRect(i, 0, i + plankWidth, size, GameViewThread.bgGrey);
            canvas.drawRect(0, i, size, i + plankWidth, GameViewThread.bgGrey);
        }

        // draw field
        canvas.drawRect(-10, -10, TronStatics.FIELDSIZE + 10, TronStatics.FIELDSIZE + 10, GameViewThread.wallPaint);

    }

}
4

0 に答える 0