我正在制作一款模仿经典游戏的应用。因此,我需要渲染一些像素艺术。
我有一个100x100位图作为缓冲区,我在缓冲区上绘制所有内容没有任何困难。
当我尝试在480x480 Canvas上渲染它时,问题就出现了。
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多毫秒)。所以我写信询问是否有更好的出路。谢谢。
答案 0 :(得分:1)
我会做一些事情:
将getHeight()
和getWidth()
分解为局部变量,以便在循环的每次迭代中都不会调用它。 (例如int height = getHeight(); for(int y = 0; y < height; y++);
)
使用中间数组存储像素,然后在循环完成后,使用setPixels()
方法而不是setPixel()
同时设置所有像素 - 效率明显更高而不是一次设置一个像素。