2012-08-23 83 views
0

我正在製作一款模仿經典遊戲的應用。所以我需要渲染一些像素藝術。Android Pixel Art Rendering on Canvas

我有一個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多ms)。所以我寫信詢問是否有更好的出路。謝謝。

回答

1

我會做幾件事情:

  1. getHeight()getWidth()闖入局部變量,以便它不叫循環的每次迭代。 (例如int height = getHeight(); for(int y = 0; y < height; y++);

  2. 使用一箇中間數組來存儲的像素,則當循環完成後,使用setPixels()方法,而不是setPixel()一次全部設定的像素 - 它是比設置像素的一個顯著更有效一次。

+1

它的工作原理!之前不知道setPixels。謝謝你給我一個寶貴的教訓! 對於那些有同樣問題的人: 同時使用getPixels而不是getPixel。 – Raytheon