【问题标题】:Android Pixel Art Rendering On Canvas画布上的 Android 像素艺术渲染
【发布时间】:2012-08-23 15:59:32
【问题描述】:

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

我有一个 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+ 毫秒)。所以我写信询问是否有更好的出路。谢谢。

【问题讨论】:

    标签: android canvas bitmap pixel


    【解决方案1】:

    我会做几件事:

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

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

    【讨论】:

    • 有效!以前不知道 setPixels。谢谢你给了我宝贵的一课!对于那些有同样问题的人:也使用 getPixels 而不是 getPixel 一个一个。
    猜你喜欢
    • 2021-03-13
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多