平滑地更新位图

时间:2016-03-22 23:29:50

标签: java android multithreading bitmap android-bitmap

为了给我的游戏添加一个惊喜因素,我决定随机反转背景颜色。当玩家收集时,让我们说,21个金色培根剥离背景变化。通过修改位图的像素,我通过以下代码完成了此操作:

public void invert() {
    int length = BackBitmap.getWidth() * BackBitmap.getHeight();
    int[] array = new int[length];
    BackBitmap.getPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight());
    int[] array2 = new int[length];
    int a2 = 0;

    for(int col = 0; col < BackBitmap.getHeight(); col++){
        for (int row = 0; row < BackBitmap.getWidth();row++){
            array2[a2] = BackBitmap.getPixel(row,col);
            a2++;
        }
    }

    for (int i=0;i<length;i++){
        array[i] = 0xFFFFFF - array2[i];
        }
    BackBitmap = BackBitmap.copy(Bitmap.Config.ARGB_8888, true);
    BackBitmap.setPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight());
}

然而,一旦颜色反转,游戏就会遇到重大延迟。令我惊讶的是,我认为这种更新位图的方式将是最有效的 - 记忆方式。什么是解决此错误的正确方法?

1 个答案:

答案 0 :(得分:0)

public void invert() {
    int length = BackBitmap.getWidth() * BackBitmap.getHeight();
    int[] array = new int[length];
    int[] array2 = new int[length];
    BackBitmap.getPixels(array2, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight());

    for (int i=0;i<length;i++){
        array[i] = 0xFFFFFF - array2[i];
    }
    BackBitmap = BackBitmap.copy(Bitmap.Config.ARGB_8888, true);
    BackBitmap.setPixels(array, 0, BackBitmap.getWidth(), 0, 0, BackBitmap.getWidth(), BackBitmap.getHeight());
}

这就是我写它的方式。您正在写入数组,然后在不使用它的情况下重写它。

这可能不会显着减少延迟,但可能会有所帮助。