TestSort.java package cn.gyzt.testsort; /** * Java递归实现折中算法 * @author 漆艾林 * @param <O> */ public class TestSort<O extends Comparable<O>> { private O[] data; public TestSort(O[] data) { this.data = data; } /** * 递归折中算法 */ public int sortByReturn(int low, int high, O value) { int mid = (low+high)/2; if(value.compareTo(data[mid])<0) { high = mid -1; return sortByReturn(low,high,value); }else if(value.compareTo(data[mid])>0) { low = mid + 1; return sortByReturn(low,high,value); }else { return mid; } } /** * 循环折中算法 * @param args */ public int sortByWhile(O value) { if(value==null) { return 0; } int low = 0; int high = data.length-1; int mid ; while(low<=high) { mid = (high+low)/2; if(value.compareTo(data[mid])<0) { high = mid-1; }else if(value.compareTo(data[mid])>0) { low = mid+1; }else if(value.compareTo(data[mid])==0) { return mid; } } return -1; } public static void main(String[] args) { Integer data[] = {1,2,5,7,9,33,43,45,66,78,93,67}; TestSort<Integer> ts = new TestSort<Integer>(data); System.out.println("sort by while:"+ts.sortByWhile(5)); System.out.println("sort2 by while:"+ts.sortByReturn(0,data.length-1,33)); } } ScreenCapture.java package cn.gyzt.screencapture; import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.imageio.*; import java.io.*; /** * @Author 漆艾林 一个简单的屏幕抓图 * 2011年1月21日 17:06:44 **/ public class ScreenCapture { // test main public static void main(String[] args) throws Exception { String userdir = System.getProperty("user.dir"); File tempFile = new File("d:", "temp.png"); ScreenCapture capture = ScreenCapture.getInstance(); capture.captureImage(); JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); JLabel imagebox = new JLabel(); panel.add(BorderLayout.CENTER, imagebox); imagebox.setIcon(capture.getPickedIcon()); capture.saveToFile(tempFile); capture.captureImage(); imagebox.setIcon(capture.getPickedIcon()); frame.setContentPane(panel); frame.setSize(400, 300); frame.show(); System.out.println("Over"); } private ScreenCapture() { try { robot = new Robot(); } catch (AWTException e) { System.err.println("Internal Error: " + e); e.printStackTrace(); } JPanel cp = (JPanel) dialog.getContentPane(); cp.setLayout(new BorderLayout()); labFullScreenImage.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent evn) { isFirstPoint = true; pickedImage = fullScreenImage.getSubimage(recX, recY, recW, recH); dialog.setVisible(false); } }); labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evn) { if (isFirstPoint) { x1 = evn.getX(); y1 = evn.getY(); isFirstPoint = false; } else { x2 = evn.getX(); y2 = evn.getY(); int maxX = Math.max(x1, x2); int maxY = Math.max(y1, y2); int minX = Math.min(x1, x2); int minY = Math.min(y1, y2); recX = minX; recY = minY; recW = maxX - minX; recH = maxY - minY; labFullScreenImage.drawRectangle(recX, recY, recW, recH); } } public void mouseMoved(MouseEvent e) { labFullScreenImage.drawCross(e.getX(), e.getY()); } }); cp.add(BorderLayout.CENTER, labFullScreenImage); dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); dialog.setAlwaysOnTop(true); dialog.setMaximumSize( Toolkit.getDefaultToolkit().getScreenSize()); dialog.setUndecorated(true); dialog.setSize(dialog.getMaximumSize()); dialog.setModal(true); } // Singleton Pattern public static ScreenCapture getInstance() { return defaultCapturer; } /** 捕捉全屏慕 */ public Icon captureFullScreen() { fullScreenImage = robot.createScreenCapture(new Rectangle( Toolkit.getDefaultToolkit().getScreenSize())); ImageIcon icon = new ImageIcon(fullScreenImage); return icon; } /** * 捕捉屏幕的一个矫形区域 */ public void captureImage() { fullScreenImage = robot.createScreenCapture(new Rectangle( Toolkit.getDefaultToolkit().getScreenSize())); ImageIcon icon = new ImageIcon(fullScreenImage); labFullScreenImage.setIcon(icon); dialog.setVisible(true); } /** 得到捕捉后的BufferedImage */ public BufferedImage getPickedImage() { return pickedImage; } /** 得到捕捉后的Icon */ public ImageIcon getPickedIcon() { return new ImageIcon(getPickedImage()); } /** * 储存为一个文件,为PNG格式 * *@deprecated * * replaced by saveAsPNG(File file) **/ @Deprecated public void saveToFile(File file) throws IOException { ImageIO.write(getPickedImage(), defaultImageFormater, file); } /** 储存为一个文件,为PNG格式 */ public void saveAsPNG(File file) throws IOException { ImageIO.write(getPickedImage(), "png", file); } /** 储存为一个JPEG格式图像文件 */ public void saveAsJPEG(File file) throws IOException { ImageIO.write(getPickedImage(), "JPEG", file); } /** 写入一个OutputStream */ public void write(OutputStream out) throws IOException { ImageIO.write(getPickedImage(), defaultImageFormater, out); } // singleton design pattern private static ScreenCapture defaultCapturer = new ScreenCapture(); private int x1, y1, x2, y2; private int recX, recY, recH, recW; // 截取的图像 private boolean isFirstPoint = true; private BackgroundImage labFullScreenImage = new BackgroundImage(); private Robot robot; private BufferedImage fullScreenImage; private BufferedImage pickedImage; private String defaultImageFormater = "png"; private JDialog dialog = new JDialog(); } /** 显示图片的Label */ class BackgroundImage extends JLabel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawRect(x, y, w, h); String area = Integer.toString(w) + " * " + Integer.toString(h); g.drawString(area, x + (int) w / 2 - 15, y + (int) h / 2); g.drawLine(lineX, 0, lineX, getHeight()); g.drawLine(0, lineY, getWidth(), lineY); } public void drawRectangle(int x, int y, int width, int height) { this.x = x; this.y = y; h = height; w = width; repaint(); } public void drawCross(int x, int y) { lineX = x; lineY = y; repaint(); } int lineX, lineY; int x, y, h, w; }