我有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/