2012-07-12 6 views
0

무작위 모양이 모두 검은 색으로 칠해진이 비트 맵을 가지고 있다고 가정 해 봅시다. 색상을 변경하기 위해 베일이 필요하다고 말하면 내 비트 맵이 모두 흰색으로 칠 해져야합니다. 거기에 뭔가가 있습니까?Android : 비트 맵의 ​​색상을 변경하십시오.

+0

비트 맵을 흰색으로 먼저 그려야 할 필요는 없습니다. 배경을 가진 언제든지 설정할 수 있습니다. – AkashG

+0

drawBitmap (비트 맵, 행렬, 페인트 (녹색)) 명령을 사용하는 이유는 무엇입니까? 내 비트 맵은 검은 색으로 남아 있습니다. 이렇게하는 방법이 있습니까? 아니면 모든 것을 엉망으로 만들었습니까? –

+0

나는 페인트 (색상 녹색) 그게 왜 painting.pass only 매개 변수를 페인트 및 페인트에 녹색 페인트로 뭔가 문제가 있어야한다고 생각합니다. paint.setColor (Color.GREEN); – AkashG

답변

3

캔버스를 사용하는 경우 비트 맵의 ​​색상을 변경하는 방법은 비트 맵 자체를 변경하는 것입니다. 관련된 단계는 다음과 같습니다.

어딘가에있는 기존의 비트 맵을로드하고 어떻게 든 빨간색으로 색칠하고 싶다고합시다.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap); 

그런 다음 비트 맵의 ​​픽셀을 캔버스에 그리기 전에 수정해야합니다. 모든 픽셀을 보유 할 int 배열을 만듭니다.

int[] pixels; 
bitmap.getPixels(pixels, 0, 0, 0, 0, width, height); 

그런 다음 배열을 수정해야합니다 (예 : 빨간색 구성 요소에 추가). 그러나 지금 당장 가지고있는 것은 픽셀 배열 내부의 int 값입니다. R, G 및 B는 모두 내부에 포장되어 있습니다. 어떻게 검색합니까?

int red = Color.red(pixels[n]); 
int green = Color.green(pixels[n]); 
int blue= Color.blue(pixels[n]); 

그런 다음 당신은 당신이 원하는에 의해 픽셀의 값을 수정, 당신은 루프 또는 그러나 당신이 좋아에 넣어, 다음 픽셀 배열에 다시 넣을 수 있습니다. 또한 RGB 값은 8 비트 값이기 때문에 0에서 255 사이의 값을가집니다.

바로 뒤에 정확히 반대되는 기능을 사용하여 되돌릴 것입니다.

bitmap.setPixels(pixels, 0, 0, 0, 0, width, height); 

그리고 나서 Canvas.drawBitmap()을 호출 할 준비가되었습니다.

자주 묻는다면이 과정은 느려야합니다. 게임과 같은 실시간 앱에 관심이 있다면 캔버스가 느린 방법입니다.

희망이있었습니다.

+0

으로 설정할 수 있습니다. 우선 픽셀을 초기화해야하므로 int [] pixels = null; 또는 또한 컴파일 오류가 .. 두 번째 int 입력 할 수 없습니다 (int n = 0; n

+0

루프, 두 번 사용 :) , 효과가있었습니다. 감사 :) –

관련 문제