32位谷歌电视上的位图速度很慢。坏像素格式?

时间:2013-02-13 21:37:39

标签: android google-tv

我想知道我在这里做错了什么。

我使用dimesions 1080x1080:

创建一个位图
Bitmap level = Bitmap.createBitmap(1080, 1080, Config.ARGB_8888);

然后我绘制一些线并将其放入其中并将其放在我的SurfaceView中的画布上:

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

此操作在我的谷歌电视NSZ-GS7上需要20毫秒。很久很久。

将surfaceCreated中的pixelformat设置为RGBX_8888或RGBA_8888会使事情变得更糟,绘制时间为30ms。

holder.setFormat(PixelFormat.RGBX_8888);

设置为RGB_888

holder.setFormat(PixelFormat.RGB_888);
当我画一些东西

时,

会导致nullpointerexceptions

仅用于位图的Config.RGB_565和用于窗口的PixelFormat.RGB_565的组合 将画面以可接受的10ms绘制到画布上,但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);

    }

}

0 个答案:

没有答案