0

我正在制作一个模仿经典游戏的应用程序。因此我需要渲染一些像素艺术。

我有一个 100x100 位图作为缓冲区,我在缓冲区上绘制所有内容没有任何困难。

当我尝试在 480x480 画布上渲染它时,问题就来了。

Bitmap.createScaledBitmap 会给我一个模糊的位图,所以我使用下面的代码在“块(放大的像素)”之间进行清晰的划分。

float scale = getWidth() / 100f;
for(int y = 0 ; y < getHeight() ; y++){
    for(int x = 0 ; x < getWidth() ; x++){
        buffer2.setPixel(x, y, buffer.getPixel((int)(x / scale), (int)(y / scale)));
    }
}

该代码运行良好,并且完全符合我的要求。但是性能很差(需要 300+ 毫秒)。所以我写信询问是否有更好的出路。谢谢你。

4

1 回答 1

1

我会做几件事:

  1. 将你的getHeight()andgetWidth()分解成局部变量,这样就不会在循环的每次迭代中调用它。(例如int height = getHeight(); for(int y = 0; y < height; y++);

  2. 使用中间数组来存储像素,然后当循环完成时,使用setPixels()方法而不是setPixel()一次设置所有像素——这比一次设置一个像素要有效得多。

于 2012-08-23T16:04:17.690 回答