2013-04-04 92 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

相关问题