2014-03-28 100 views
2

我想知道盡可能簡單的解決方案(到目前爲止我只找到非常複雜的解決方案)以簡單的問題:如何在Graphics2D中繪製圖像並將一種顏色設置爲完全透明?Java Graphics2D繪製透明色的圖像

到目前爲止,我是想這樣的事情,但沒有成功:

private Image head; 
public void draw(Graphics2D g) {  
    g.setComposite(AlphaComposite.Src); 
    Color transparentWhite = new Color(255,255,255,1); 
    g.drawImage(head, (int)posX, (int)posY, transparentWhite, null);   
} 

我有一個白色的周圍,我不想畫繪畫。

回答

2

好的,終於找到了答案,這是我找到的最簡單的解決方案。

private Image head; 

//This is constructor, here I use method that adding transparency to image. 
public Character(BufferedImage head){ 
     this.head = makeColorTransparent(head, Color.WHITE); 
} 

public void draw(Graphics2D g) { 
     g.drawImage(head, (int) posX, (int) posY, null); //variable head is saved with transparency, so now it is drawing right 
} 

//Just copy-paste this method 
public static Image makeColorTransparent(BufferedImage im, final Color color) { 
    ImageFilter filter = new RGBImageFilter() { 

     // the color we are looking for... Alpha bits are set to opaque 
     public int markerRGB = color.getRGB() | 0xFF000000; 

     public final int filterRGB(int x, int y, int rgb) { 
      if ((rgb | 0xFF000000) == markerRGB) { 
       // Mark the alpha bits as zero - transparent 
       return 0x00FFFFFF & rgb; 
      } else { 
       // nothing to do 
       return rgb; 
      } 
     } 
    }; 

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

因此你發佈一個問題,然後在一個小時內自己回答。好功夫。 – Arvy