2014-01-15 3 views
0

이제 다른 이미지의 픽셀을 pg에서 m의 소스 이미지 픽셀에 적용 할 수 있습니다. 하지만 문제는 그 그라디언트 또는 페이딩 효과를 잃어 버리는 것입니다.자바에서 투명한 픽셀의 색을 바꿉니다

 public static void main(String[] args){ 
     try { 
      BufferedImage image = ImageIO.read(new File("c:\\m.png")); 
      BufferedImage patt = ImageIO.read(new File("c:\\pg.png")); 

      int f = 0; 
      int t = 0; 
      int n = 0; 
      BufferedImage bff = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
      for (int y = 0; y < image.getHeight(); ++y) { 
       for (int x = 0; x < image.getWidth(); ++x) { 
        int argb = image.getRGB(x, y); 
        int nrg = patt.getRGB(x, y); 

        if(((argb>>24) & 0xff) == 0) { 
           bff.setRGB(x, y, (255<<24)); 
        } else { 
           bff.setRGB(x, y, nrg); 
        }        
       } 
      } 
      System.out.println("Trans : " + t + " Normal : " + n); 
      File outputfile = new File("c://imagetest.png"); 
      ImageIO.write(bff, "png", outputfile); 
     } catch (IOException ex) { 

     } 

} 

감사합니다.

+0

색상을 변경하지 마십시오 ... 투명도를 변경하십시오 – sanket

+0

투명도를 변경하는 방법 –

답변

2

0xff000000은 불투명 한 검정색이며, 0x00000000은 완전히 투명합니다.

0 (사용자가 선택한 색상)은 무엇입니까?

예, 투명합니다.

시도해보십시오. 0xff000000 또는 그 이상 : argb^0xff000000으로 변경하면 투명도가 변경됩니다. rgb 값은 다음과 같이 구성되어 있습니다 BufferedImage.setRGB(int x, int y, int rgb)를 들어

   if(((argb>>24) & 0xff) == 0) { 
          bff.setRGB(x, y, argb^0xff000000); 
       } else { 
          bff.setRGB(x, y, argb); 
       }        
+0

예, 이제 모든 투명 픽셀이 흰색으로 작동합니다. –

0

은 다음과 같습니다

0의 알파 값을 테스트
if (((argb >> 24) & 0xff) == 0) 

, 따라서 :

11111111 11111111 11111111 11111111 
Alpha Red  Green Blue

코드에서 다음과 같은 테스트 완전히 투명합니다. 당신이 그것을 사실로 발견하면

, 당신은 다음

bff.setRGB(x, y, 0); 

그래서 다시 투명으로 설정되어 함께 0으로 RGB 값을 설정합니다.

bff.setRGB(x, y, (255<<24)); 

또는

bff.setRGB(x, y, 0xff000000); //This should be better 

에 불투명 한 흑색 화소로 변경할 것을

변경. 이

11111111000000000000000000000000

의 바이너리 값을가집니다

편집 : 투명성을 제거하면서 픽셀의 색상을 유지으로Moritz Petersen's solution 더 잘 작동합니다.

특정 색상으로 설정하려는 경우 당신이 할 수 있습니다 :

bff.setRGB(x, y, 0xffff0000); // red 
bff.setRGB(x, y, 0xff00ff00); // green 
bff.setRGB(x, y, 0xff0000ff); // blue 

또는 적색, 녹색, 청색 값의 조합.

+0

정말 도움이됩니다. –

+0

다른 이미지의 픽셀을 불투명 한이 이미지에 추가하고 싶습니다. –

+0

'bff.setRGB (x, y, argb^0xff000000);'(Moritz Petersen 출신) 달성 할 수 있습니다. 당신이 지금 모든 것을 희게하는 이유는 원래의 이미지가 픽셀을 투명한 흰색으로 설정하기 때문입니다. – ufis

관련 문제