2012-02-13 54 views
0

我試圖使方法將BufferedImage的一種顏色更改爲不可見。
我自己找不到解決方案,所以請求您的幫助。
這裏是方法我做的:兩個類似的方法與BufferedImage,一個工作,一個不是。爲什麼?

public static BufferedImage makeWithoutColor(BufferedImage img, Color col) 
{ 
    BufferedImage img1 = img; 
    BufferedImage img2 = new BufferedImage(img1.getWidth(), img1.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = img2.createGraphics(); 
    g.setComposite(AlphaComposite.Src); 
    g.drawImage(img1, null, 0, 0); 
    g.dispose(); 
    for(int i = 0; i < img2.getWidth(); i++) 
    { 
     for(int j = 0; i < img2.getHeight(); i++) 
     { 
      if(img2.getRGB(i, j) == col.getRGB()) 
      { 
       img2.setRGB(i, j, 0x8F1C1C); 
      } 
     } 
    } 
    return img2; 
} 

這裏是一個從教程中,我讀出。

public static BufferedImage makeColorTransparent(BufferedImage ref, Color color) { 
    BufferedImage image = ref; 
    BufferedImage dimg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = dimg.createGraphics(); 
    g.setComposite(AlphaComposite.Src); 
    g.drawImage(image, null, 0, 0); 
    g.dispose(); 
    for(int i = 0; i < dimg.getHeight(); i++) { 
     for(int j = 0; j < dimg.getWidth(); j++) { 
      if(dimg.getRGB(j, i) == color.getRGB()) { 
      dimg.setRGB(j, i, 0x8F1C1C); 
      } 
     } 
    } 
    return dimg; 
} 
+0

您是否有錯誤信息?你有沒有嘗試複製/粘貼教程,只是將'image'改爲'img1'? – talnicolas 2012-02-13 19:30:29

+1

好的,哪個人在工作,哪個不在?如果有人正在工作什麼問題/ – ghostbust555 2012-02-13 19:30:47

+0

高度/寬度倒序,這可能是問題嗎? – kosa 2012-02-13 19:30:51

回答

2

你的錯誤是這行:

for(int j = 0; i < img2.getHeight(); i++) 

應該是:

for(int j = 0; j < img2.getHeight(); j++) 
//   ^     ^as Ted mentioned... 
+0

也許應該是'j ++'。 – 2012-02-13 19:32:24

+0

@TedHopp facepalming我自己 – MByD 2012-02-13 19:32:45

+0

謝謝,多麼可惜,我沒有看到它。 – Boblob 2012-02-13 19:33:10

0

我認爲通過 「看不見」 你的意思是你想使一個顏色透明。你不能使用這種方法做到這一點,因爲setRGB不會影響alpha通道。你最好使用圖像過濾器。下面是this thread採用的方法:

public static Image makeWithoutColor(BufferedImage img, Color col) 
{ 
    ImageFilter filter = new RGBImageFilter() { 

     // the color we are looking for... Alpha bits are set to opaque 
     public int markerRGB = col.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); 
} 

這將打開任何像素與指定的RGB顏色和任何透明度相同顏色的完全透明像素。

相關問題