2012-10-01 3 views
1

회색 음영 이미지에 흰색 반점이 포함 된 검은 이미지를 겹치기를 원합니다.이 검은 색 이미지를 투명하게 만들고 싶습니다. Java에서 here 코드를 사용했습니다.자바에서 이미지 겹침

그러나 출력에 빨간색 이미지가 표시됩니다. 왜?

코드가 여기에 언급되어

public class OverlayImage{ 
     public static void main(String[] args) { 
      File path = new File("/home/dmdd/Desktop/images"); // base path of the images 

      // load source images 
      BufferedImage image=null; 
      BufferedImage overlay=null; 
      try { 
       image = ImageIO.read(new File(path, "image.jpg")); 
       overlay = ImageIO.read(new File(path, "overlay.jpg")); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //overlay =(BufferedImage) makeImageTransparent(overlay,50); 
      OverlayImage over=new OverlayImage(); 
      // create the new image, canvas size is the max. of both image sizes 
      int w = Math.max(image.getWidth(), overlay.getWidth()); 
      int h = Math.max(image.getHeight(), overlay.getHeight()); 
      //BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 

      Image overlay1=over.TransformGrayToTransparency(overlay); 
      BufferedImage combined=over.ApplyTransparency(image, overlay1); 
      try { 
       ImageIO.write(over.toBufferedImage(combined, w, h), "JPG", new File(path, "combined.jpg")); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
     private Image TransformGrayToTransparency(BufferedImage image) 
     { 
      ImageFilter filter = new RGBImageFilter() 
      { 
       public final int filterRGB(int x, int y, int rgb) 
       { 
        return (rgb << 8) & 0xFF000000; 
       } 
      }; 

      ImageProducer ip = new FilteredImageSource(image.getSource(), filter); 
      return Toolkit.getDefaultToolkit().createImage(ip); 
     } 

     private BufferedImage ApplyTransparency(BufferedImage image, Image mask) 
     { 
      BufferedImage dest = new BufferedImage(
        image.getWidth(), image.getHeight(), 
        BufferedImage.TYPE_INT_ARGB); 
      Graphics2D g2 = dest.createGraphics(); 
      g2.drawImage(image, 0, 0, null); 
      AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.DST_IN, 1.0F); 
      g2.setComposite(ac); 
      g2.drawImage(mask, 0, 0, null); 
      g2.dispose(); 
      return dest; 
     } 
} 

화이트 스팟 이미지는 다음과 같습니다 enter image description here

검은 이미지는 다음과 같습니다 enter image description here

오버레이 된 빨간색 이미지입니다 : enter image description here

+6

질문에 코드를 추가해야합니다 ... – Baz

+0

... 막연한 이미지 설명이 특히 있습니다. 최종 결과는 정확히 무엇입니까? –

+0

@YanickRochon 이미지를 첨부합니다. 나는 회색 음영 이미지에서 검은 이미지의 정치적 경계를 원합니다. – Achyut

답변

2

당신은 결과 이미지를 jpeg로 저장하십시오. 결과 이미지에는 알파/투명도 레벨이 포함되는 반면 jpeg 이미지는 투명도를 지원하지 않습니다. png 이미지로 저장하십시오.

+0

고마워요 @ 댄은 저에게 효과적이지만, 검은 색 이미지의 흰색 픽셀 (정치적 경계)을보다 선명하고 두껍게 만들고 싶습니다. 이것이 어떻게 달성 될 수 있습니까? – Achyut

+0

비슷한 픽셀 색상 변환을 수행해야합니다. 더 두껍게 만들려면 이웃 픽셀을 흰색으로 만들어야합니다. 아마도 다른 사람이 더 나은 대답을 제공 할 수있는 다른 질문 일 것입니다. –