请牛人指教 我现在做个东西,需要把一张图片加载到内存中,然后在显示出来,然后用鼠标点击图片上的点,能获取图片上的点的三维坐标,请提供一个具体的思路,说的详细点!多谢了,我一点图片处理的经验都没有!请大神说些点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package test;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;public class AppPanel extends JPanel { // variables and components========================== private JPanel imageBox; private JPanel toolPane; private JLabel counterLabel; private int counter; private boolean showWholeImage; private JButton selectButton; private JButton breakButton; private JButton viewImageButton; private Image[] images; private Image wholeImage; private JFileChooser chooser; // constructor============================= public AppPanel() { // initial variables chooser = new JFileChooser(); images = new BufferedImage[24]; wholeImage = null; showWholeImage = true; counter = 0; setLayout(new BorderLayout()); // initial components imageBox = new JPanel(); imageBox.setBackground(Color.GRAY); toolPane = new JPanel(); counterLabel = new JLabel("操作次数:" + counter); viewImageButton = new JButton("显示原图"); selectButton = new JButton("选择图片"); final Component self = this; final JLabel lable = new JLabel(); selectButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(self)) { try { wholeImage = ImageIO.read(chooser.getSelectedFile()); showWholeImage = true; lable.setIcon(new ImageIcon(wholeImage)); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "打开文件失败"); } } } }); breakButton = new JButton("打乱图片"); toolPane.add(counterLabel); toolPane.add(selectButton); toolPane.add(breakButton); toolPane.add(viewImageButton); add(toolPane, BorderLayout.SOUTH); add(lable); img =Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("test/a.jpg")); lable.setIcon(new ImageIcon(img)); } private Image img; public static void main(String[]args) { JFrame frm = new JFrame("test"); AppPanel appPanel = new AppPanel(); frm.getContentPane().add(appPanel); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setSize(600,400); frm.setVisible(true); }} 鼠标移到import java.awt.BorderLayout;import java.awt.Font;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;import javax.swing.JPanel;public class MoveMessageDemo extends JFrame { public MoveMessageDemo() { MovableMessagePanel p = new MovableMessagePanel("welcome to java"); p.setFont(new Font("Serif", Font.BOLD, 24)); setLayout(new BorderLayout()); add(p); } public static void main(String[] args) { MoveMessageDemo frame = new MoveMessageDemo(); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("MoveMessageDemo"); frame.setSize(200, 100); frame.pack(); frame.setVisible(true); } static class MovableMessagePanel extends JPanel { private String message = "Welcome to Java"; private int x = 20; private int y = 20; public MovableMessagePanel(String s) { message = s; addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawString(message, x, y); } }} SWING中的图片读取并显示:首先选择一个显示图片的东东,例如JLabel在JLabel中有setIcon(Icon icon) 方法在看继承Icon的一个类:ImageIcon,它可以由Image得到~~再看继承Image的一个类:BufferedImage,它就是从文件中读取到内存中最后,如何得到这个BufferedImage?可以参考javax.imageio.ImageIO中的read(File input) 方法。 太简单了吗,用MouseListener,然后就是getX() getY()之类了的就ok了嘛! 问大家一个关于线程同步synchronized 的问题? java中的一个小问题?? 请教牛人,通过java怎么截取网络数据包????急急!!!! applet中类路径如何指定 大家帮我看看这段程序的错误在哪呢 关于线程中wait(),notify()的一个问题? 怎么把一个文件转化成字节流数组? 我用jspsmart.upload 组建上传大的影音文件时,速度出奇的慢,请问这个问题怎么解决? 为什么我用下面的方法取不到输入流的值?? jb5的Applet如何能在IE下浏览使用? HttpURLConnection异常处理 JAVA数据结构
import java.awt.Color;
import java.awt.Component;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;public class AppPanel extends JPanel {
// variables and components==========================
private JPanel imageBox; private JPanel toolPane; private JLabel counterLabel; private int counter; private boolean showWholeImage; private JButton selectButton; private JButton breakButton; private JButton viewImageButton; private Image[] images; private Image wholeImage; private JFileChooser chooser; // constructor=============================
public AppPanel() {
// initial variables
chooser = new JFileChooser();
images = new BufferedImage[24];
wholeImage = null;
showWholeImage = true;
counter = 0;
setLayout(new BorderLayout());
// initial components
imageBox = new JPanel();
imageBox.setBackground(Color.GRAY);
toolPane = new JPanel();
counterLabel = new JLabel("操作次数:" + counter);
viewImageButton = new JButton("显示原图");
selectButton = new JButton("选择图片");
final Component self = this;
final JLabel lable = new JLabel();
selectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(self)) {
try {
wholeImage = ImageIO.read(chooser.getSelectedFile());
showWholeImage = true; lable.setIcon(new ImageIcon(wholeImage)); } catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "打开文件失败");
}
}
}
});
breakButton = new JButton("打乱图片");
toolPane.add(counterLabel);
toolPane.add(selectButton);
toolPane.add(breakButton);
toolPane.add(viewImageButton);
add(toolPane, BorderLayout.SOUTH);
add(lable);
img =Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("test/a.jpg"));
lable.setIcon(new ImageIcon(img));
} private Image img;
public static void main(String[]args) {
JFrame frm = new JFrame("test");
AppPanel appPanel = new AppPanel();
frm.getContentPane().add(appPanel);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(600,400);
frm.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
import javax.swing.JPanel;public class MoveMessageDemo extends JFrame { public MoveMessageDemo() {
MovableMessagePanel p = new MovableMessagePanel("welcome to java");
p.setFont(new Font("Serif", Font.BOLD, 24));
setLayout(new BorderLayout());
add(p);
} public static void main(String[] args) {
MoveMessageDemo frame = new MoveMessageDemo();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("MoveMessageDemo");
frame.setSize(200, 100);
frame.pack();
frame.setVisible(true);
} static class MovableMessagePanel extends JPanel {
private String message = "Welcome to Java"; private int x = 20; private int y = 20; public MovableMessagePanel(String s) {
message = s;
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) { x = e.getX();
y = e.getY();
repaint();
}
});
} @Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString(message, x, y);
}
}
}
首先选择一个显示图片的东东,例如JLabel
在JLabel中有setIcon(Icon icon) 方法
在看继承Icon的一个类:ImageIcon,它可以由Image得到~~
再看继承Image的一个类:BufferedImage,它就是从文件中读取到内存中
最后,如何得到这个BufferedImage?可以参考javax.imageio.ImageIO中的
read(File input) 方法。