2011-11-28 3 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

픽셀을 얻지 못하게하려면 어떻게해야합니까? 안드로이드가 이미지를 바꾸고 있습니까? 사용하기에 안전한 색상이 있습니까?

+0

0xff39ff00이 작동하는 것처럼 보이지만 색상이 다른 것과 비슷합니다. 이것은 매우 짜증나게되고 있습니다. – Taylor

+0

ffff00, ff00ff, 0000ff, 심지어 00aeff와 같은 색상은 "안전"한 것 같습니다. 하지만 999900, 666600 등은 아닙니다. 왜 그런지는 잘 모르겠습니다 만, 이것이 어떻게 보이는지입니다. 정말 나쁘다. 와우. – Taylor

답변

0

-151774720xFF186900입니다. 찾고 있던 6 대신 9자를 확인하십시오.

어디에서 예상되는 값을 얻고 있으며 비트 맵을 어떻게로드합니까? 드로잉 프로그램에서 비트 맵을 만든 다음 Android 앱에 비트 맵을로드하는 경우 비트 맵을 16bpp로 압축 해제하는 중입니다.이 경우 픽셀 값을 getPixel()에 대한 32bpp로 다시 변환 할 때 정확도가 떨어집니다 .

관련 문제