2012-02-08 13 views
2

약간의 문제가 있다고 생각합니다. 어렵지 않을 수 있습니다. 하지만 어떻게 든, 나는 "어려운 수 없습니다"부분 :).색상 코드를 사용하여 if 문을 작성하는 방법

bmp = BitmapFactory.decodeResource(getResources(), R.drawable.four_colors); 


    //define the array size 
    rgbValues = new int[bmp.getWidth()][bmp.getHeight()]; 

    //Print in LogCat's console each of one the RGB and alpha values from the 4 corners of the image 
    //Top Left 
    for (int j = 0; j < 1000; j++){ 
     for (int k = 0; k < 1000; k++){ 
    Log.i("Pixel Value", "pixel x="+j +k + Integer.toHexString(bmp.getPixel(j, k))); 
    test = Integer.toHexString(bmp.getPixel(j, k)); 


     } 
    } 

    //get the ARGB value from each pixel of the image and store it into the array 
    for(int i=0; i < bmp.getWidth(); i++) 
    { 
     for(int j=0; j < bmp.getHeight(); j++) 
     { 
      //This is a great opportunity to filter the ARGB values 
      rgbValues[i][j] = bmp.getPixel(i, j);    
     } 
    } 

    System.out.println(PixelNumber); 
    System.out.println(test); 
} 

이 코드는 마치 마법처럼 작동합니다

나는 이미지의 색상을 읽는 코드를 얻었다.

if (color == black){ 
    number++; 
} 

그래서 모든 픽셀 그는 그 검은 색보고, 그가 1

내가 좋은을 위해 온 수있는 거의 모든 시도와 수를 증가해야합니다 는하지만 구현하기 위해 문 같은 경우 시도 이 코드를 둘러싼 if 문.하지만 아무 것도 작동하지 않는 것 같습니다. 이 코드에서 올바른 위치와 if 문은 무엇입니까?

어쩌면 당신이 원하지 않는다면 너무 많은 노력을 기울이지 않아도됩니다. 단 1 색 대신 색 범위를 확인하는 것이 가능하므로 모든 녹색 색을 선택합니다. (포토샵의 색상 범위와 동일).

+1

: 당신이 손 알고리즘을 갖게되면, 다른 방법에 넣어와 같은 전화를 할 변수 코드는 다른 코드의 어느 위치에서나 사용할 수 있습니다. –

답변

1

getPixel은 4GB의 ARGB를 정수로 반환합니다. 당신이해야 할 일은 계산하고자하는 색을 구성하는 것입니다 (argb 방법은 Color이 도움이 될 것입니다).이 값을 getPixel(x, y)으로 테스트하십시오.
검정을 위해이 쉬운 것입니다 : 범위에 대한

if(Color.BLACK == bmp.getPixel(x, y)) 
    //doit 

는 각 해당 구성 요소의 값을 반환하는 green/red/blue 방법을 사용할 수 있습니다. 0이 아닌 경우 픽셀은 해당 구성 요소의 색상을가집니다.

+0

'int '와'Color'를 비교합니다. 이렇게하면 컴파일 시간 오류가 발생합니다. –

+0

Color.BLACK은 int 상수입니다. docs : http://developer.android.com/reference/android/graphics/Color.html#BLACK – zeller

+0

@Andreas_D'Color.BLACK'과'getPixel()'모두 int입니다. – DRiFTy

0

if (rgbValues ​​[i] [j] == Color.BLACK)와 같은 조건으로 설정할 수 있습니다.

해당 코드는 다음과 같습니다.

//get the ARGB value from each pixel of the image and store it into the array 
    for(int i=0; i < bmp.getWidth(); i++) 
    { 
     for(int j=0; j < bmp.getHeight(); j++) 
     { 
      //This is a great opportunity to filter the ARGB values 

      rgbValues[i][j] = bmp.getPixel(i, j); 
      if(rgbValues[i][j] == Color.BLACK) { 

     } 
    } 
0

Bitmap#getPixel(int, int)은 주어진 픽셀의 투명도 (알파)와 색 (rgb)을 나타내는 int 값을 반환합니다.

검은 색의 RGB 값은 (0x00, 0x00, 0x00)입니다. 당신이 검은 는 알파 값을 무시 테스트 싶다면, 시험은 다음과 같이 가야한다 :

if ((rgbValue[i][j] & 0x00ffffff) == 0) { 
    // this pixel is black 
    number++; 
} 

색상 범위가 매우 어렵습니다. 먼저 녹색의 계산 가능한 정의가 필요합니다. 예를 들어입니다. 녹색은 꽤 주관적입니다. (A)의 언급이없는 그 당신은 if 문을 시도했습니다 WHERE 이해하는 것이 불가능 설명에서

if (isGreenish(rgbValue[i][j])) {  // magic method 
    // this pixel is some sort of green 
    number++; 
} 
관련 문제