2010-06-23 2 views

ответ

4

Первый результат от Google заключается в следующем:

сделать цвет прозрачного http://www.rgagnon.com/javadetails/java-0265.html

Это делает Синюю часть изображения прозрачного, но я уверен, что вы можете адаптировать, что использовать белый intstead

(подсказка: Pass Color.WHITE к функции makeColorTransparent вместо Color.BLUE)

Найдено более полное и современное отво er here: How to make a color transparent in a BufferedImage and save as PNG

+3

+1 для подсказки. Мы не хотели бы путать SWDeveloper. –

+0

Привет, спасибо за ответ ур, я пробовал этот код с белым, а не синим, но я не получаю прозрачное изображение, цвет фона изображения заполнен черным цветом. FYI - я не использовал апплет вместо этого, я использовал «ImageIO.write» и написал его как image.png, попробовал также с gif. – SWDeveloper

+0

Нашли это также http://stackoverflow.com/questions/665406/how-to-make-a-color-transparent-in-a-bufferedimage-and-save-as-png –

0

Это мое решение. Этот фильтр удалит фон с любого изображения, если цвет фонового изображения находится в верхнем левом углу.

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; 
    } 
} 

В другом месте ...

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

Этот метод будет сделать фон прозрачным. Вам необходимо передать изображение, которое вы хотите изменить, цвет и терпимость.

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); 
} 
Смежные вопросы