我有一张READY图像(图像的颜色是灰色的,它是GIVEN,即我不用Java创建它,否则我只是动态地改变颜色)。图像形状奇特,即它不是矩形。我有一个透明的部分和“图像内容”部分(常规.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);
}
}
答案 0 :(得分: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);
}
}