2015-05-25 2 views
0

Как бы я мог направить значок, который проходит здесь, для другого цвета? Скажем, я хотел взять белое изображение и сделать его немного темнее. Я посмотрел на BufferedImages и так, но я не могу найти ничего, что впишется в настройки, которые я использую. Я также должен отметить, что я рисую изображения на JLabel, если это имеет значение.Как оттолкнуть ImageIcon

Вот источник, который я использую, чтобы вы могли получить представление о том, с чем я работаю.

public class Icon extends ImageIcon{ 

    private int scale = 1; 
    private boolean mirror = false; 

    public Icon(URL url) throws IOException{ 
     super(ImageIO.read(url)); 
    } 

    public void setScale(int scale){ 
     this.scale = scale; 
    } 

    @Override 
    public synchronized void paintIcon(Component c, Graphics g, int x, int y) { 
     Graphics2D g2 = (Graphics2D)g.create(); 
     int height = 0, width = this.getIconWidth(), x1 = 1; 
     if(mirror || scale != 1){ 
      height = -this.getIconHeight(); 
     } 
     if(mirror){ 
      x1 = -1; 
     }else{ 
      width = 0; 
     } 
     g2.translate(width * scale, height); 
     g2.scale(x1 * scale, 1 * scale); 
     super.paintIcon(c, g2, x, y); 
    } 

    public boolean isMirror() { 
     return mirror; 
    }  

    public void setMirror(boolean mirror) { 
     this.mirror = mirror; 
    } 
} 
+0

Используйте 'ColorTintFilter' из дубликата ссылки выше, либо непосредственно, либо изменить его к вашим потребностям. Это будет красиво отображать ваше изображение. Однако, если вы просто хотите сделать изображение немного темнее, вы можете просто перекрасить его прозрачным черным (например, «новый цвет (0x20000000, true)» или аналогичный). – haraldK

ответ

1

вам нужно создать новый BufferedImage, чтобы сделать преобразование в:

public BufferedImage colorImage(BufferedImage loadImg, int red, int green, int blue) { 
    BufferedImage img = new BufferedImage(loadImg.getWidth(), loadImg.getHeight(), 
     BufferedImage.TRANSLUCENT); 
    Graphics2D graphics = img.createGraphics(); 
    Color newColor = new Color(red, green, blue, 0 /* alpha needs to be zero */); 
    graphics.setXORMode(newColor); 
    graphics.drawImage(loadImg, null, 0, 0); 
    graphics.dispose(); 
    return img; 
} 
+0

Я пробовал это раньше, и он, похоже, не работает, даже если я установил изображение на 100% черного цвета, оно все равно делает цвета странными. – Cyphereion

Смежные вопросы