Prendiamo questo brano di codice
codice:
try {
  img1 = new BufferedImage(img1.getWidth(), img1.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
  for (int i = 0; i < ret.getWidth(); i++) {
    for (int j = 0; j < ret.getHeight(); j++) {
      if(img2.getRGB(i, j)>0.9) {
        img1.setRGB(i, j, img1.getRGB(i, j));
      }
      else {
        img1.setRGB(i, j, 0);
      }				    
    }
  }
}
Per prima cosa, istanzi una nuova img1, con le dimensioni della vecchia img1 e color-space scala di grigi. Ok, fin qui tutto regolare.
poi cicli, come da mio codice, su img2 e verifichi se i pixel "abbiano un valore maggiore" di una certa soglia... ecco già qui cominciano i problemi: DEVI leggere le API associate: quel getRGB restituisce un int e ti assicuro che sempre e comunque sarà più grande di 0.9, a meno che il pixel non sia completamente nero... quindi siamo dentro l'if e qui sorgono i problemi: setti il colore del pixel i,j di img1 al colore che ha il pixel i,j di img1!!!!! Assurdo, ancora non esiste nemmeno quel pixel.