通过X和Y坐标获取图像中的十六进制颜色

时间:2016-10-13 09:36:08

标签: java

我有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颜色? 感谢。

2 个答案:

答案 0 :(得分:1)

ng-repeat是类getRGB的方法,不属于类java.awt.image.BufferedImage。要使用此方法,您需要一个java.awt.Image

类型的对象

解决此问题的两个选项:

  
      
  1. 将FrameTest()方法的返回类型更改为BufferedImage
  2.   
  3. 在调用getRGB
  4. 时,将Image对象强制转换回BufferedImage   

在这种情况下,第一个选项应该是正确的选择

答案 1 :(得分:0)

您的方法FrameTest()会返回Image。但是,该类不提供方法getRGB(x,y)。将FrameTest()的返回类型更改为BufferedImage时,它应该有效。 BufferedImage.getRGB(int x, int y)返回颜色的RGB int值。

旁注:您知道,每次点击时,都会创建一个新的FrameTest实例,并且在调用FrameTest.FrameTest()时,图片将被加载从磁盘(每次)?

另一方面注意:优良作法是用大写字母(如你所做)命名你的类,用小写字母命名你的方法(例如:frameTest())。更好的是,为您的方法命名,以便了解它们的作用,例如getImage()