2013-04-23 3 views
0

이미지를 반 투명하게 만들기 위해 픽셀의 알파 값을 변경하려고합니다. 당신이 볼 수 있듯이에서는 setRGB는 알파 값을 생략하고 "FF"로 설정처럼, 그것 보인다픽셀의 알파 값 변경

before: 331b1aff 
after: ff1b1aff 
before: 331918ff 
after: ff1918ff 
before: 331e1bff 
after: ff1e1bff 
before: 332623ff 
after: ff2623ff 
before: 332e29ff 
after: ff2e29ff 

:

for(int x=0;x<image1.getWidth();x++) { 
    for(int y=0;y<image1.getHeight();y++) { 
     int rgb = image1.getRGB(x, y); 

     rgb = rgb | 0x000000ff; // make the image blue. 
     rgb = rgb & 0x33ffffff; // make the image transparent. 
     System.out.println("before: " + Integer.toHexString(rgb)); 

     image1.setRGB(x, y, rgb); 
     int now_rgb= image1.getRGB(x, y); 
     System.out.println("after: " + Integer.toHexString(now_rgb)); 
    } 
} 

출력은 그 같은 것입니다 : 여기 내 코드입니다. 이 문제를 어떻게 해결할 수 있습니까? 왜 처음에는이 문제가 발생합니까?

+1

은 당신이 현재 프로세스에 연결하는 방법에 따라, 당신은 [이]에서 모습을 가질 수있다 (HTTP : //stackoverflow.com/questions/16054596/change-color-of-non-transparent-parts-of-png-in-java/16054956#16054956) – MadProgrammer

+1

image1.getType()을 인쇄하려고하면 ARGB 여야합니다. http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.image.BufferedImage.TYPE_INT_ARGB를 참조하십시오. – Aubin

답변

2

BufferedImage 님의 컬러 모델이 알파를 지원하지 않았거나 알파에 대해 단일 비트만을 사용했기 때문일 수 있습니다.

어디에서 image을 받았습니까? ARGB의 컬러 모델입니까? 확인하려면 image.getColorModel().hasAlpha()을 사용하십시오. 그렇지 않은 경우 이미지를 만들 때 적절한 색상 모델이 있는지 확인하고 변경할 수없는 경우 원하는 색상 모델로 새 이미지를 만들고 원본 이미지를 먼저 복사하십시오.

2

사용 AlphaComposite :

BufferedImage img = //some code here 
BufferedImage imgClone = //some clone of img, but let its type be BufferedImage.TYPE_INT_ARGB 
Graphics2D imgCloneG = imgClone.createGraphics(); 
imgCloneG.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.5f)); 
imgCloneG.drawImage(img, 0, 0, null); 
//imgClone is now img at half alpha 

imgClone는 다음과 같이 할 수있다 :

... 
imgClone = new BufferedImage(img.getWidth(), img.getHeight(), 
          BufferedImage.TYPE_INT_ARGB); 
Graphics2D imgCloneG = imgClone.createGraphics(); 
imgCloneG.drawImage(img, 0, 0, null); 
imgCloneG.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.5f)); 
...