gpt4 book ai didi

java - 更改 JFrame 中显示的 ImageIcon

转载 作者:行者123 更新时间:2023-12-04 06:11:20 24 4
gpt4 key购买 nike

我这里有这个代码。我希望它在调用 main 方法时首先显示用户输入的图像文件,然后对其应用更改。我的第一个函数是 grayscale()。我在 JMenuBar 中提供了一个灰度按钮,这样在单击时,它将创建当前图像的灰度版本。它有效,但是在应用该方法后,我无法在 JFrame 中显示新图像。我试过调用 show();在方法中,但这只会再次打开原始图像。我知道灰度功能正在完成它的工作,它只是不显示之后的结果图像。创建后如何让它显示image2?谢谢您的帮助。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.image.*;
import javax.imageio.ImageIO;

public class ImageEdit{
Container content;
static BufferedImage image;
BufferedImage image2;

public ImageEdit(String filename) {
File f = new File(filename);
//assume file is the image file
try {
image = ImageIO.read(f);
}
catch (IOException e) {
System.out.println("Invalid image file: " + filename);
System.exit(0);
}
}

public void show() {
final int width = image.getWidth();
final int height = image.getHeight();

JFrame frame = new JFrame("Edit Picture");

//set frame title, set it visible, etc
content = frame.getContentPane();
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//add the image to the frame
ImageIcon icon = new ImageIcon(image);
frame.setContentPane(new JLabel(icon));
frame.pack();

//add a menubar on the frame with a single option: saving the image
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
JMenuItem saveAction = new JMenuItem("Save");
fileMenu.add(saveAction);
JMenuItem grayScale = new JMenuItem("Grayscale");
fileMenu.add(grayScale);
grayScale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
grayscale(width, height);
}
});

//paint the frame
frame.setVisible(true);
}

public void grayscale(int width, int height) {
// create a grayscale image the same size
image2 = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);

// convert the original colored image to grayscale
ColorConvertOp grayScale = new ColorConvertOp(
image.getColorModel().getColorSpace(),
image2.getColorModel().getColorSpace(),null);
grayScale.filter(image,image2);
show();
}

public static void main(String[] args) {
ImageEdit p = new ImageEdit(args[0]);
p.show();
}
}

最佳答案

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;

public class ImageEdit{
Container content;
BufferedImage image;
BufferedImage image2;
JLabel imageLabel;

public ImageEdit(BufferedImage image) {
this.image = image;
}

public void show() {
final int width = image.getWidth();
final int height = image.getHeight();

JFrame frame = new JFrame("Edit Picture");

//set frame title, set it visible, etc
content = frame.getContentPane();
//frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//add the image to the frame
ImageIcon icon = new ImageIcon(image);
imageLabel = new JLabel(icon);
frame.setContentPane(imageLabel);

//add a menubar on the frame with a single option: saving the image
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
JMenuItem saveAction = new JMenuItem("Save");
fileMenu.add(saveAction);
JMenuItem grayScale = new JMenuItem("Grayscale");
fileMenu.add(grayScale);
grayScale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
grayscale(width, height);
}
});

//paint the frame
frame.pack();
frame.setVisible(true);
}

public void grayscale(int width, int height) {
// create a grayscale image the same size
image2 = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);

// convert the original colored image to grayscale
ColorConvertOp grayScale = new ColorConvertOp(
image.getColorModel().getColorSpace(),
image2.getColorModel().getColorSpace(),null);
grayScale.filter(image,image2);
imageLabel.setIcon(new ImageIcon(image2));
//show();
}

public static void main(String[] args) {
int size = 120;
int pad = 10;
BufferedImage bi = new BufferedImage(
size,
size,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,size,size);
g.setColor(Color.YELLOW);
g.fillOval(pad,pad,size-(2*pad),size-(2*pad));
g.dispose();

ImageEdit p = new ImageEdit(bi);
p.show();
}
}

关于java - 更改 JFrame 中显示的 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com