2013-01-25 7 views
12

이미지를 비트 맵으로로드하고 ImageView에 표시하는 Android 앱이 있습니다. 문제는 이미지가 투명한 배경을 가진 것처럼 보입니다. 이로 인해 이미지의 검은 색 텍스트 일부가 검정색 배경에서 사라집니다.Android Bitmap : 투명 픽셀을 색상으로 변환

ImageView 배경을 흰색으로 설정하면 해당 종류의 이미지가 작동하지만 부모 크기에 맞게 이미지가 확대되는 이미지에는 거친 테두리가 생깁니다 (실제 이미지는 중간에 크기가 조정 됨).

그래서 저는 비트 맵의 ​​투명한 픽셀을 단색으로 변환하려고합니다. 그러나 어떻게해야 할지를 알 수 없습니다!

도움을 주시면 감사하겠습니다.

감사 크리스

+0

정말 도움이 될 스크린 샷이 있다면. 이 문제를 해결하려고하는 것처럼 나에게 들린다. 나는 당신이 원하는 효과를 얻기 위해 서로의 위에보기를 시도하고 겹칠 것입니다. 그렇게하면 배경색과 배경색이 서로 다른 이미지 뷰를 오버레이 할 수 있습니다. – Nathan

답변

22

당신이 리소스로 이미지를 포함하는 경우, 그냥 gimp 같은 프로그램에서 이미지를 직접 편집하는 가장 쉬운 방법입니다. 거기에 배경을 추가 할 수 있으며, 모양이 어떻게 보이는지 확인할 수 있으며로드 될 때마다 이미지를 수정하는 처리 능력에 익숙하지 않습니다.

이미지를 직접 제어 할 수없는 경우 Bitmapimage이라고 가정 할 때 이와 유사한 방법으로 이미지를 수정할 수 있습니다.

Bitmap imageWithBG = Bitmap.createBitmap(image.getWidth(), image.getHeight(),image.getConfig()); // Create another image the same size 
imageWithBG.eraseColor(Color.WHITE); // set its background to white, or whatever color you want 
Canvas canvas = new Canvas(imageWithBG); // create a canvas to draw on the new image 
canvas.drawBitmap(image, 0f, 0f, null); // draw old image on the background 
image.recycle(); // clear out old image 
+0

감사합니다 - 그랬습니다! – ccbunney

5

당신이 할 수있는 각 픽셀을 반복하고 투명되어 있는지 확인합니다.

이와 비슷한 것. (테스트되지 않은)

 Bitmap b = ...; 
     for(int x = 0; x<b.getWidth(); x++){ 
      for(int y = 0; y<b.getHeight(); y++){ 
       if(b.getPixel(x, y) == Color.TRANSPARENT){ 
        b.setPixel(x, y, Color.WHITE); 
       } 
      } 
     } 
+2

이 전략을 사용한다면'getPixel'을 사용하지 마십시오. 'Bitmap'의 모든 픽셀을 반복 할 때마다 [getPixels'] (http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels%28int [], % 20int, % 20int, % 20int, % 20int, % 20int, % 20int % 29)를 사용하십시오. – kabuko

+1

@MrZander -이 방법을 시도했지만 작동하지 않았습니다. 디버그 문을 추가하면 TRANSPARENT 픽셀을 찾았지만 WHITE (또는 RED 또는 다른 색상)로 설정하면 효과가 없습니다. 이미지는 여전히 투명성을 가지고있는 것 같다 .... 이상한 ??? – ccbunney

+0

@KernowBunney 아마도 비트 맵을 변경할 수 없기 때문일 수 있습니다. 'Bitmap b = yourbitmap.copy (Bitmap.Config.ARGB_8888, true)'를 수행하고 새 비트 맵을 이미지로 설정하십시오. 또한이 방법은 테스트되지 않았으므로 가장 효율적인 방법인지는 알 수 없습니다. @ kabuko는 요점을 가지고 있을지도 모른다. – MrZander

관련 문제