2013-04-04 45 views
2

我有一個READY圖像(圖像的顏色是灰色的,它是GIVEN,即我不創建它在Java中,否則我只是動態地改變顏色)。圖像形狀奇怪,即它不是矩形。我有一個透明部分和「圖像內容」部分(一個普通的.png樣式)。我只需要使「圖像內容」部分變得更暗。我試過如下:有什麼辦法讓Java中的READY .png圖片變暗嗎?

public class ImageDarkener extends JFrame { 
private JButton button; 
private JLabel myImage; 
public ImageDarkener() 
{ 
createImageDarkener(); 
} 
private void createImageDarkener() { 
Container contentPane = getContentPane(); 
contentPane.setBackground(Color.WHITE); 
contentPane.setLayout(null); 

contentPane.setSize(900,600); 

myImage = new JLabel(); 
myImage.setIcon(new ImageIcon("myImage.png")); 
myImage.setBounds(403,31,200,200); 
contentPane.add(myImage); 

button = new JButton("Go darker"); 
button.setBounds(90,400, 100, 100); 
contentPane.add(button); 
button.addActionListener(
    new ActionListener() 
    { 
    public void actionPerformed(ActionEvent event) { 
    buttonActionPerformed(event); 
    } 
} 
); 

setTitle("Image gets darker"); 
setSize(900,600); 
setVisible(true); 
setLocationRelativeTo(null); 

} 

private void buttonActionPerformed(ActionEvent event) { 
myImage.darker(); 
    // Here I am stuck...I tried many combinations with darker().....etc. 
I need to be able to click the button and myImage should get darker and darker 
until it is completely black... 
} 


public static void main(String args[]) { 
ImageDarkener img = new ImageDarkener(); 
img.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 

回答

5

我相信,這是後話,你所期望的:

public class ImageDarkener extends JFrame { 
    private JButton button; 
    private JLabel myImage; 

    public ImageDarkener() { 
     createImageDarkener(); 
    } 

    private void createImageDarkener() { 
     Container contentPane = getContentPane(); 
     contentPane.setBackground(Color.WHITE); 
     contentPane.setLayout(null); 

     contentPane.setSize(900, 600); 

     myImage = new JLabel(); 
     myImage.setIcon(new ImageIcon("myImage.png")); 
     myImage.setBounds(403, 31, 200, 200); 
     contentPane.add(myImage); 

     button = new JButton("Go darker"); 
     button.setBounds(90, 400, 100, 100); 
     contentPane.add(button); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       buttonActionPerformed(event); 
      } 
     }); 

     setTitle("Image gets darker"); 
     setSize(900, 600); 
     setVisible(true); 
     setLocationRelativeTo(null); 

    } 

    private void buttonActionPerformed(ActionEvent event) { 
     Image img = ((ImageIcon) myImage.getIcon()).getImage(); 

     BufferedImage buffered = new BufferedImage(img.getWidth(null), 
     img.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
     buffered.getGraphics().drawImage(img, 0, 0, null); 

     for (int i = 0; i < buffered.getWidth(); i++) { 
      for (int j = 0; j < buffered.getHeight(); j++) {      
       int rgb = buffered.getRGB(i, j); 
       int alpha = (rgb >> 24) & 0x000000FF; 
       Color c = new Color(rgb); 
       if (alpha != 0) { 
        int red = (c.getRed() - 10) <= 0 ? 0 : c.getRed() - 10; 
        int green = (c.getGreen() - 10) <= 0 ? 0 
         : c.getGreen() - 10; 
        int blue = (c.getBlue() - 10) <= 0 ? 0 : c.getBlue() - 10; 
        c = new Color(red, green, blue); 
        buffered.setRGB(i, j, c.getRGB()); 
       } 
      } 
     } 
     myImage.setIcon(new ImageIcon(buffered)); 
    } 

    public static void main(String args[]) { 
     ImageDarkener img = new ImageDarkener(); 
     img.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

} 
+0

謝謝你,我投了。它的工作部分...但是,這是我想逃避:我的圖像是一個.png文件,即它有一個透明的部分,應該保持透明。但是,這段代碼會使透明部分變成黑色......我如何克服這個障礙?這裏是myImage.png的公共鏈接:https://dl.dropbox.com/u/41007907/myImage.png – Buras 2013-04-04 21:59:51

+0

編輯,現在應該工作 - TYPE_INT_ARGB和檢查阿爾法 – maszter 2013-04-04 22:08:49

+0

非常感謝,它的工作原理 – Buras 2013-04-04 22:24:40

相關問題