我有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颜色? 感谢。
答案 0 :(得分:1)
ng-repeat
是类getRGB
的方法,不属于类java.awt.image.BufferedImage
。要使用此方法,您需要一个java.awt.Image
解决此问题的两个选项:
- 将FrameTest()方法的返回类型更改为BufferedImage
- 在调用getRGB
时,将Image对象强制转换回BufferedImage 醇>
在这种情况下,第一个选项应该是正确的选择
答案 1 :(得分:0)
您的方法FrameTest()
会返回Image
。但是,该类不提供方法getRGB(x,y)
。将FrameTest()
的返回类型更改为BufferedImage
时,它应该有效。 BufferedImage.getRGB(int x, int y)
返回颜色的RGB int值。
旁注:您知道,每次点击时,都会创建一个新的FrameTest
实例,并且在调用FrameTest.FrameTest()
时,图片将被加载从磁盘(每次)?
另一方面注意:优良作法是用大写字母(如你所做)命名你的类,用小写字母命名你的方法(例如:frameTest()
)。更好的是,为您的方法命名,以便了解它们的作用,例如getImage()
。