package com.image.compare;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageComparerUI extends JComponent implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton browseBtn;
private JButton histogramBtn;
private JButton compareBtn;
private Dimension mySize;
// image operator
private MediaTracker tracker;
private BufferedImage sourceImage;
private BufferedImage candidateImage;
private double simility;
// command constants
public final static String BROWSE_CMD = "Browse...";
public final static String HISTOGRAM_CMD = "Histogram Bins";
public final static String COMPARE_CMD = "Compare Result";
public ImageComparerUI() {
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
browseBtn = new JButton("Browse...");
histogramBtn = new JButton("Histogram Bins");
compareBtn = new JButton("Compare Result");
// buttons
btnPanel.add(browseBtn);
btnPanel.add(histogramBtn);
btnPanel.add(compareBtn);
// setup listener...
browseBtn.addActionListener(this);
histogramBtn.addActionListener(this);
compareBtn.addActionListener(this);
mySize = new Dimension(620, 500);
JFrame demoUI = new JFrame("Similiar Image Finder");
demoUI.getContentPane().setLayout(new BorderLayout());
demoUI.getContentPane().add(this, BorderLayout.CENTER);
demoUI.getContentPane().add(btnPanel, BorderLayout.SOUTH);
demoUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demoUI.pack();
demoUI.setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (sourceImage != null) {
Image scaledImage = sourceImage.getScaledInstance(300, 300,
Image.SCALE_FAST);
g2.drawImage(scaledImage, 0, 0, 300, 300, null);
}
if (candidateImage != null) {
Image scaledImage = candidateImage.getScaledInstance(300, 330,
Image.SCALE_FAST);
g2.drawImage(scaledImage, 310, 0, 300, 300, null);
}
// display compare result info here
Font myFont = new Font("Serif", Font.BOLD, 16);
g2.setFont(myFont);
g2.setPaint(Color.RED);
g2.drawString("The degree of similarity : " + simility, 50, 350);
}
public void actionPerformed(ActionEvent e) {
if (BROWSE_CMD.equals(e.getActionCommand())) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f = chooser.getSelectedFile();
BufferedImage bImage = null;
if (f == null)
return;
try {
bImage = ImageIO.read(f);
} catch (IOException e1) {
e1.printStackTrace();
}
tracker = new MediaTracker(this);
tracker.addImage(bImage, 1);
// blocked 10 seconds to load the image data
try {
if (!tracker.waitForID(1, 10000)) {
System.out.println("Load error.");
System.exit(1);
}// end if
} catch (InterruptedException ine) {
ine.printStackTrace();
System.exit(1);
} // end catch
if (sourceImage == null) {
sourceImage = bImage;
} else if (candidateImage == null) {
candidateImage = bImage;
} else {
sourceImage = null;
candidateImage = null;
}
repaint();
} else if (HISTOGRAM_CMD.equals(e.getActionCommand())) {
// do something now...
} else if (COMPARE_CMD.equals(e.getActionCommand())) {
ImageComparer imageCom = new ImageComparer(sourceImage,
candidateImage);
simility = imageCom.modelMatch();
repaint();
}
}
public Dimension getPreferredSize() {
return mySize;
}
public Dimension getMinimumSize() {
return mySize;
}
public Dimension getMaximumSize() {
return mySize;
}
public static void main(String[] args) {
new ImageComparerUI();
}
}
最近下载更多
微笑刺客 LV21
2024年5月30日
一头土猪 LV7
2021年12月22日
okliu123456 LV24
2021年12月14日
与你同行2019 LV11
2019年11月26日
LYXNAME LV1
2018年7月19日
马昌平 LV2
2018年3月16日
dagf113225 LV68
2018年3月12日
andinker LV10
2018年2月21日
Black_杰ck LV1
2017年12月25日
weizhi LV5
2017年12月4日
最近浏览更多
lipanlong LV10
2024年12月3日
sswert LV2
2024年9月12日
微笑刺客 LV21
2024年5月30日
liyonggang LV2
2024年1月19日
lvdong2023 LV10
2023年5月17日
13655961071 LV5
2023年5月4日
xuaniw LV4
2022年10月17日
微信网友_5992582549164032 LV6
2022年6月29日
ttppbb LV4
2022年6月29日
eddie2260 LV2
2022年6月17日

