我正在用圖像製作顏色選擇器程序。程序首先加載圖像,然後當您將鼠標懸停在圖像上時,它將從鼠標的X和Y位置獲取當前像素的RGB值。我已經設置了框架並加載了它們的圖像,有人可以幫我使用像素嗎?從鼠標的緩衝圖像中獲取像素RGB X和Y的位置
package net.ogpc.settings;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.io.File;
import java.io.IOException;
public class ColorChooser implements Runnable, MouseListener{
public static String path = "FileIO Plug-Ins\\Resources\\color-picker.png";
public static boolean running = false;
public static String r = "100";
public static String g = "100";
public static String b = "100";
JFrame frame = new JFrame("Choose A Color");
JTextField JR = new JTextField();
JTextField JG = new JTextField();
JTextField JB = new JTextField();
Container colorImage = new Container();
Container east = new Container();
public ColorChooser() {
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
frame.setResizable(false);
//set up JFrame
east.setLayout(new GridLayout(3, 3));
east.add(JR);
east.add(JG);
east.add(JB);
frame.add(east);
//import the color chooser image
Import();
frame.setVisible(true);
running = true;
run();
}
public void run() {
while (running) {
getPixel();
try {
Thread.sleep(250);
}catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void getPixel() {
//get it m9!
JR.setText(r);
JG.setText(g);
JB.setText(b);
System.out.println("r: " + r + " g: " + g + " b: " + b);
}
public void Import() {
colorImage.setLayout(new FlowLayout());
try {
File file = new File(path);
BufferedImage image;
image = ImageIO.read(file);
JLabel label = new JLabel(new ImageIcon(image));
label.addMouseListener(this);
colorImage.add(label, BorderLayout.NORTH);
frame.getContentPane().add(colorImage, BorderLayout.WEST);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new ColorChooser();
}
public void mouseClicked(MouseEvent arg0) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
//each time you click on the image... print out the pixel RGB here
}
public void mouseReleased(MouseEvent arg0) {
}
}
任何幫助是偉大的!
你的'while-loop'讓我害怕。確保你瞭解[Swing的工作原理](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) – MadProgrammer
你也看看這個[示例](https://stackoverflow.com/問題/ 17983560/rgb-retrieval-of-a-color-image/17983691#17983691)一些想法 – MadProgrammer