我有MouseListener来获取X和Y坐标,并且需要在加载的图像的X和Y坐标上获取RGB / HEX颜色。
我有以下代码,但在行上出现错误“找不到方法getRGB()”:

new FrameTest().FrameTest().getRGB(x, y);


我的代码:

package frametest;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FrameTest extends JFrame implements MouseListener
{
    public static void main(String[] args) throws IOException
    {
        JFrame frame = new JFrame("FrameTest");
        JLabel JLabel = new JLabel();

        frame.add(new JLabel(new ImageIcon(new FrameTest().FrameTest())));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(1600, 900));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.addMouseListener(new MouseListener()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                Point p = e.getPoint();
                int x = e.getX();
                int y = e.getY();

                new FrameTest().FrameTest().getRGB(x, y);
                System.out.println("X: " + x + "\nY: " + y + "\n\n");
            }
            @Override
            public void mousePressed(MouseEvent e) {}
            @Override
            public void mouseReleased(MouseEvent e) {}
            @Override
            public void mouseEntered(MouseEvent e) {}
            @Override
            public void mouseExited(MouseEvent e) {}
        });
        frame.setVisible(true);

    }
    public Image FrameTest()
    {
        try
        {
            BufferedImage image = ImageIO.read(new File("RIPME.png"));
            return image;
        } catch (IOException e)
        {
            System.err.print(e.getMessage());
            return null;
        }
    }
    @Override
    public void mouseClicked(MouseEvent e) {}
    @Override
    public void mousePressed(MouseEvent e) {}
    @Override
    public void mouseReleased(MouseEvent e) {}
    @Override
    public void mouseEntered(MouseEvent e) {}
    @Override
    public void mouseExited(MouseEvent e) {}
    }


我如何解决它并获得十六进制颜色/ RGB颜色?
谢谢。

最佳答案

您的方法FrameTest()返回一个Image。但是,此类不提供方法getRGB(x,y)。当您将FrameTest()的返回类型更改为BufferedImage时,它应该可以工作。 BufferedImage.getRGB(int x, int y)返回颜色的RGB int值。

附带说明一下:您是否知道,每次单击类FrameTest的新实例时,都会在调用FrameTest.FrameTest()时(每次)从磁盘加载映像?

另外请注意:优良作法是使用大写字母命名类(如您所做的那样),并使用小写字母命名方法(例如:frameTest())。更好的是,命名您的方法,以便您了解它们的作用,例如getImage()

关于java - 通过X和Y坐标获取图像中的十六进制颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40017365/

10-11 00:54