2011-11-28 126 views
2

我想做一個非常簡單的瓷磚引擎。但是,使用Bitmap.getpixel(x,y)並不總是與顏色正確匹配。這似乎是在0xFFFFFFFF,0xFF000000,0xFF1896000xFF18FF00,但與0xFF186600有問題。我試圖將其更改爲多種不同的相似顏色,但它似乎仍未正確讀取它。我正在比較一個簡單的switch語句。這裏是我的方法Bitmap.getpixel不能正確讀取顏色?

public void LoadLevel(Canvas canvas, int levelName) 
{ 

     Bitmap level = BitmapFactory.decodeResource(getResources(), levelName); 
     Bitmap startTile = BitmapFactory.decodeResource(getResources(), R.drawable.starttile); 

     canvas.drawColor(Color.WHITE); 

     int drawX = 0; 
     int drawY = 0; 

     for(int y = 0; y < level.getHeight(); y++) 
     { 
      for(int x = 0; x < level.getWidth(); x++) 
      { 
       switch(level.getPixel(x, y)) 
       { 
        case 0xFF000000: break; 

        case 0xFFFFFFFF: 
         canvas.drawBitmap(startTile, drawX, drawY, null); 
         break; 

        case 0xFF189600: 
         canvas.drawBitmap(startTile, drawX, drawY, null); 
         break; 

        case 0xFF18FF00: 
         canvas.drawBitmap(startTile, drawX, drawY, null); 
         break; 

        case 0xFF186600: 
         canvas.drawBitmap(startTile, drawX, drawY, null); 
         break; 
       } 

       Log.d("Color", Integer.toString(level.getPixel(x, y))); 

       drawX += 128; 
      } 
      drawX = 0; 
      drawY += 128; 
     } 
} 

根據日誌代碼,顏色爲「-15177472」。我不確定是什麼顏色,但實際上是...所以我不知道是否-15177472 == 0xFF186600

我不正確地做不到像素? Android是否改變圖像?我想使用安全的顏色嗎?

+0

0xff39ff00似乎有效,但顏色與其他顏色太相似。這變得非常煩人。 – Taylor

+0

它似乎是「安全」的顏色,如ffff00,ff00ff,0000ff,甚至00aeff​​。但不是999900,666600等。我不知道爲什麼,但這似乎是。真的很不準確。哇。 – Taylor

回答

0

-151774720xFF186900。請注意0​​數字,而不是您正在查找的6

你從哪裏獲得這些期望值,以及如何加載位圖?如果您在繪圖程序中創建位圖,然後將它們加載到Android應用程序中,則可能會發現它們正在被解壓縮爲16bpp,在這種情況下,在將像素值轉換回32bpp爲getPixel()時會存在一些精度損失。