2012-12-12 6 views
0

저는 이것이 합성과 관련이 있다는 것을 알고 있지만, 나는 무엇을 해결할 수 없는지 알고 있습니다.BufferedImage의 투명 영역이 검정색으로 바뀌고 있습니다.

 for(Pixel p : closed){ 
      Color c = new Color(image.getRGB(p.x, p.y)); 
      Color newC = new Color(0,0,0, 0); 
      image.setRGB(p.x, p.y, newC.getRGB() & 0x00000000); 
     } 

     if(andCrop){ 
      image = image.getSubimage(left, top, right-left, bottom-top); 
     } 


     return image; 

가 그럼 난 이미지를 쓰려고 : 코드의 이전 섹션에서 BufferedImage의 픽셀의 특정 목록이 투명 검은 색으로 설정되어

try { 

      BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), java.awt.Transparency.TRANSLUCENT); 
      Graphics2D g2d = out.createGraphics(); 
      g2d.setComposite(AlphaComposite.Clear); 
      g2d.fillRect(0, 0, image.getWidth(), image.getHeight()); 
      g2d.setComposite(AlphaComposite.Src); 
      g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); 
      g2d.dispose(); 

      File outputfile = new File(file); 
      ImageIO.write(out, "png", outputfile); 
     } catch (IOException e) { 

     } 

을 지금, 나는 알고 이미지를 그려 넣으려고하기 전에 'out'이 분명합니다. 내가 얻지 못하는 것은 합성에있어 잘못된 점입니다. 투명하게 나오지 않고, 나는 완전히 검게 변합니다.

사용 된 모든 버퍼링 된 이미지는 INT_ARGB입니다.

편집 -이 문제가 해결되었습니다. ImageIO.read의 이미지 소스이며 반환 된 BufferedImage가 알파를 지원하지 않았습니다. 빠른 포스트 읽기 변환을 통해 나머지 코드는 원활하게 실행됩니다. 내 마음에 오는

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+1

BTW - ['BufferedImage.TYPE_INT_ARGB'] (http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.image.BufferedImage.TYPE_INT_ARGB)를 사용하면 이미지 유형이 아닌 ['Transparency.TRANSLUCENT'] (http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.Transparency.TRANSLUCENT)를 참조하십시오. –

답변

0

Whelp, 지금은 downvoted되었습니다. 관련성이있는 것은 확실하지 않지만 문제는 원본 BufferedImage가 ImageIO에서 읽었으며이 이미지는 ARGB을 지원하지 않습니다. 빠른 포스트 읽기 변환은 나머지 코드가 작동하도록 허용했습니다.

1

것들 ... (앤드류에게 감사) :

java.awt.Transparency.TRANSLUCENT = 3 
TYPE_INT_ARGB = 2 
TYPE_INT_ARGB_PRE = 3 

public BufferedImage(int width, 
       int height, 
       int imageType) 

Constructs a BufferedImage of one of the predefined image types. (TYPE_...) 

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/BufferedImage.html

는 그래서 그것은 호환 문제입니다 같은 기본적으로 보인다.

게다가 입니다. 원하는 효과를 얻으시겠습니까? 당신은 빈 이미지를 지운 다음, 그 위에 완전히 투명한 픽셀을 그립니다 ... 나는 단지 그것을 얻지 못합니다.

+0

이전에 ARGB를 사용했습니다 - 반투명은 필사적 인 스크래핑 이후였습니다. 초기 이미지가 투명해야한다고 생각했습니다. – mtrc

+0

제 문제점은 투명 픽셀이 아닌 BufferedImage를 가지고 있다는 것입니다. 테두리는 투명합니다. 나는 그것을 파일에 써야하지만, 그렇게 할 때 투명한 픽셀은 투명하지 않고 불투명하게 나옵니다. – mtrc

+0

어, 오타가 있었는데, 소스에 다음과 같습니다 : public static final int OPAQUE = 1; 공공 정적 final int BITMASK = 2; 공공 정적 final int TRANSLUCENT = 3; - 그러나 아이디어는 TRANSLUCENT의 값 3 (ARGB_PRE를 의미 함)이 가짜 방식으로 지정되었다는 것입니다. – vaxquis