java - 在Java中将点击的像素颜色更改为红色?

标签 java

当我单击图像的某个像素时,我希望将该像素更改为红色。我对 Java 图形没有太多经验,所以我可能错过了一些重要的东西。感谢您提供的任何帮助。

public class Main {
static BufferedImage image;

public static void main(String[] args) {
    try {
        image = ImageIO.read(new File("pic.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    JFrame frame = new JFrame();
    frame.getContentPane().setLayout(new FlowLayout());
    JLabel label = new JLabel(new ImageIcon(image));

    // change the pixels to random colors when hovering over them

    label.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            super.mouseClicked(e);
            System.out.println("CLICKED: " + "(" + e.getX() + "," + e.getY() + ")");
            //getColorOfPixel(e.getX(), e.getY());
            changeColorOfPixel(e.getX(), e.getY());
        }
    });

    frame.getContentPane().add(label);
    frame.pack();
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setVisible(true);
}

public static void changeColorOfPixel(int xCoordinateClicked, int yCoordinateClicked) {

    int width = image.getWidth();
    int height = image.getHeight();

    int[][] pixels = new int[width][height];

    for(int i = 0; i < width; i++) {
        for(int j = 0; j < height; j++) {
            pixels[i][j] = image.getRGB(xCoordinateClicked, yCoordinateClicked);

            if(i == xCoordinateClicked && j == yCoordinateClicked) {

                Color newColor = Color.RED;

                image.setRGB(xCoordinateClicked, yCoordinateClicked, newColor.getRGB());
            }
        }
    }
}
}

最佳答案

您需要在像素颜色更改后调用frame.repaint();,因此例如只需更改 MouseAdapter 定义,如下所示(假设 frame 也将定义为 static:

    label.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            super.mouseClicked(e);

            System.out.println("CLICKED: " + "(" + e.getX() + "," + e.getY() + ")");
            image.setRGB(e.getX(), e.getY(), Color.RED.getRGB());
            frame.repaint();
        }
    });

关于java - 在Java中将点击的像素颜色更改为红色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462010/

相关文章:

java - Tomcat在内存中打开很多实例

java - 如何将 'creating of a new instance of a fragment' 保存在变量中?

java - 在 Android 中关闭警报对话框后,如何在 Activity 调用上刷新 TextView?

java - 隐藏表格列标题中的排序指示符/箭头

java - 如何在java中使用poi从excel中的第一行到最后一行读取?

java - Jaxb 没有发现我的基类的正确儿子

java.util.Date 克隆或复制以不暴露内部引用

java - 写入包含逗号的 CSV

java - Android 在随机位置以随机大小绘制随机圆圈

java - 动态显示 DatePicker