2010-06-23 4 views

Répondre

4

Le premier résultat de Google est la suivante:

Faire une couleur transparente http://www.rgagnon.com/javadetails/java-0265.html

Il fait la partie bleue d'une image transparente, mais je suis sûr que vous pouvez adapter qu'utiliser blanc intstead

(indice: Passez Color.WHITE à la fonction makeColorTransparent, au lieu de Color.BLUE)

Trouvé un rép plus complet et moderne ici: How to make a color transparent in a BufferedImage and save as PNG

+3

+1 pour l'indice. Nous ne voudrions pas confondre SWDeveloper. –

+0

Salut tim, merci pour votre réponse, j'ai essayé ce code avec du blanc au lieu de bleu, mais je ne reçois pas une image transparente, la couleur de fond de l'image est remplie de couleur noire. FYI - Je n'ai pas utilisé l'applet à la place j'ai utilisé "ImageIO.write" et l'ai écrit comme image.png, essayé avec gif aussi. – SWDeveloper

+0

Trouvé cela aussi bien http://stackoverflow.com/questions/665406/how-to-make-a-color-transparent-in-a-bufferedimage-and-save-as-png –

0

Voici ma solution. Ce filtre supprime l'arrière-plan de n'importe quelle image tant que la couleur de l'image d'arrière-plan est dans le coin supérieur gauche.

private static class BackgroundFilter extends RGBImageFilter{ 

    boolean setUp = false; 
    int bgColor; 

    @Override 
    public int filterRGB(int x, int y, int rgb) { 
     int colorWOAlpha = rgb & 0xFFFFFF; 
     if(! setUp && x == 0 && y == 0){ 
      bgColor = colorWOAlpha; 
      setUp = true; 
     } 
     else if(colorWOAlpha == bgColor) 
      return colorWOAlpha; 
     return rgb; 
    } 
} 

Ailleurs ...

ImageFilter bgFilter = new BackgroundFilter(); 
ImageProducer ip = new FilteredImageSource(image.getSource(), bgFilter); 
image = Toolkit.getDefaultToolkit().createImage(ip); 
1

Cette méthode fera fond transparent. Vous devez transmettre l'image que vous souhaitez modifier, la couleur et la tolérance.

final int color = ret.getRGB(0, 0); 
final Image imageWithTransparency = makeColorTransparent(ret, new Color(color), 10); 
final BufferedImage transparentImage = imageToBufferedImage(imageWithTransparency); 

private static BufferedImage imageToBufferedImage(final Image image) { 
     final BufferedImage bufferedImage = 
      new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
     final Graphics2D g2 = bufferedImage.createGraphics(); 
     g2.drawImage(image, 0, 0, null); 
     g2.dispose(); 
     return bufferedImage; 
} 


private static Image makeColorTransparent(final BufferedImage im, final Color color, int tolerance) { 
    int temp = 0; 

    if (tolerance < 0 || tolerance > 100) { 

     System.err.println("The tolerance is a percentage, so the value has to be between 0 and 100."); 

     temp = 0; 

    } else { 

     temp = tolerance * (0xFF000000 | 0xFF000000)/100; 

    } 

    final int toleranceRGB = Math.abs(temp); 



    final ImageFilter filter = new RGBImageFilter() { 

     // The color we are looking for (white)... Alpha bits are set to opaque 

     public int markerRGBFrom = (color.getRGB() | 0xFF000000) - toleranceRGB; 

     public int markerRGBTo = (color.getRGB() | 0xFF000000) + toleranceRGB; 



     public final int filterRGB(final int x, final int y, final int rgb) { 

      if ((rgb | 0xFF000000) >= markerRGBFrom && (rgb | 0xFF000000) <= markerRGBTo) { 

       // Mark the alpha bits as zero - transparent 

       return 0x00FFFFFF & rgb; 

      } else { 

       // Nothing to do 

       return rgb; 

      } 

     } 

    }; 

    final ImageProducer ip = new FilteredImageSource(im.getSource(), filter); 

    return Toolkit.getDefaultToolkit().createImage(ip); 
} 
Questions connexes