2012-01-24 5 views
0

for 루프에서 픽셀 당 비트 맵의 ​​알파 값을 변경하려고합니다. 비트 맵은 다른 비트 맵의 ​​createBitmap (source, x, y, w, h)에서 만들어집니다. 약간의 테스트를했는데 알파를 변경할 수 없습니다. 그것은 setPixel 명령입니까 사실 비트 맵은 ARGB가 아닙니까?안드로이드 - 픽셀 당 알파 변경

마지막으로 단순한 페이드 아웃 효과를 만들고 싶지만 현재는 절반의 알파를 가진 초록색 픽셀 색상을 참조하지 않습니다. 당신이 도울 수 있다면 감사합니다 :)

 _left[1] = Bitmap.createBitmap(TestActivity.photo, 0, 0, 256, 256); 


     for (int i = 0; i < _left[1].getWidth(); i++) 
      for (int t = 0; t < _left[1].getHeight(); t++) { 

       int a = (_left[1].getWidth()/2) - i; 
       int b = (_left[1].getHeight()/2) - t; 
       double dist = Math.sqrt((a*a) + (b*b)); 

       if (dist > 20) _left[1].setPixel(i, t, Color.argb(128, 0, 255, 0)); 

      } 

UPDATE :

좋아이 나는 사람이 비트 맵을 방사상으로 페이드 아웃하고자하는 경우 해낸 결과입니다. 그러나 예 당신이 반환에게 불변 비트 맵을 사용하는 올바른 방향

public void fadeBitmap (Bitmap input, double fadeStartPercent, double fadeEndPercent, Bitmap output) { 

    Bitmap tempalpha = Bitmap.createBitmap(input.getWidth(), input.getHeight(), Bitmap.Config.ARGB_8888); 

    Canvas printcanvas = new Canvas(output); 

    int radius = input.getWidth()/2; 
    double fadelength = (radius * (fadeEndPercent/100)); 
    double fadestart = (radius * (fadeStartPercent/100)); 

    for (int i = 0; i < input.getWidth(); i++) 
     for (int t = 0; t < input.getHeight(); t++) { 

      int a = (input.getWidth()/2) - i; 
      int b = (input.getHeight()/2) - t; 
      double dist = Math.sqrt((a*a) + (b*b)); 

      if (dist <= fadestart) { 
       tempalpha.setPixel(i,t,Color.argb(255, 255, 255, 255)); 
      } else { 
       int fadeoff = 255 - (int) ((dist - fadestart) * (255/(fadelength - fadestart))); 
       if (dist > radius * (fadeEndPercent/100)) fadeoff = 0; 
       tempalpha.setPixel(i,t,Color.argb(fadeoff, 255, 255, 255)); 
      } 

     } 

    Paint alphaP = new Paint(); 
    alphaP.setAntiAlias(true); 
    alphaP.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 

// printcanvas.setBitmap(); 
    printcanvas.drawBitmap(input, 0, 0, null); 
    printcanvas.drawBitmap(tempalpha, 0, 0, alphaP); 

} 
+0

'_left [1] .hasAlpha()'는 무엇을 반환합니까? –

답변

1

Bitmap.createBitmap()의 버전에 단계 ... 감사 르우벤 배열없이 매우 느립니다. Bitmap.setPixel()은 아무 효과가 없습니다.

setPixel은 어쨌든 느립니다. setPixels()을 사용하거나 비트 맵 픽셀을 직접 조작하는 것보다 더 나은 방법을 찾으십시오. 별도의 알파 전용 비트 맵과 right PorterDuff mode을 사용하여 뭔가 똑똑한 작업을 할 수 있기를 기대합니다.

+0

감사합니다. 설정 픽셀이 작동하지 않습니다. 녹색은 알파 값만 표시합니다. – Metre

관련 문제