Q

  • タグ:
  • タグはありません
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Search extends PicSave {
	

	
	private int x1=0;
	private int y1=0;
	private int w1=0;
	private int h1=0;
	
	Search(){
		x1 = 0;
	}
	public void SetVal(int p1){
		x1 = p1;
	}
	
	JFrame frame;
	JPanel container;
	CanvasPane canvas;

	Point pt_from, pt_to;
	static final Point nullpoint = new Point(-1, -1);

	Search (String title) {

		/*
		 * ウィンドウ周辺のGUI初期設定
		 */
		frame = new JFrame(title);
		frame.setSize(300, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		container = (JPanel) frame.getContentPane();

		/*
		 * 描画の条件判定に使うオブジェクト
		 */
		pt_from = new Point(nullpoint);
		pt_to = new Point(nullpoint);

		canvas = new CanvasPane();
		MouseAdapter madp = new SelectiongMouseListener();
		canvas.addMouseListener(madp);
		canvas.addMouseMotionListener(madp);
		container.add(canvas);

		frame.setVisible(true);

		/*
		 * 50ミリ秒間隔でアニメーションを描かせるスレッド
		 */
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new FrameDrawer(), 0, 50);
	}

	class CanvasPane extends JPanel {

		BufferedImage image;
		TexturePaint tp;

		Color pale = new Color(0, 0, 255, 110);
		Color transparent = new Color(0, 0, 0, 0);

		CanvasPane () {
			super();
			this.setBackground(Color.white);
			this.setOpaque(true);
			
			/*
			 * 描画キャンバスとなるパネルの生成段階(コンストラクタ)で、
			 *  以後繰返し利用するテクスチャ・オブジェクトを用意する
			 */
			int len = 50;
			
			image = new BufferedImage(len, len, BufferedImage.TYPE_INT_ARGB);
			Graphics2D gbi = image.createGraphics();
			gbi.setColor(transparent);
			gbi.fillRect(0, 0, len, len );

			gbi.setColor(pale);
			int unit = len / 2;
			for (int i = 0; i < 2; i++) {
				gbi.fillRect(unit * i, unit * i, unit, unit);
			}

			Rectangle rect = new Rectangle(0, 0, len, len );
			tp = new TexturePaint(image, rect);

		}

		public void paintComponent (Graphics g) {
			super.paintComponent(g);	//バックグラウンド色による初期化なども含まれる
			Graphics2D g2 = (Graphics2D)g;
			//画像の取得
			 BufferedImage readImage = null;
			    try {
			      readImage = ImageIO.read(new File("10.jpg"));
			    } catch (Exception e) {
			      e.printStackTrace();
			      readImage = null;
			    }

			    if (readImage != null){
			      g2.drawImage(readImage, 0, 0, this);
			    }

			    
			if (!pt_from.equals(nullpoint) && !pt_to.equals(nullpoint) ) {
				/*
				 * 始点・終点双方の条件をチェックするのは、mousePressedだけされて
				 *  mouseMovedが生じていない場合に描画を見送るため
				 */
			    
				int x = Math.min(pt_from.x, pt_to.x);
				int y = Math.min(pt_from.y, pt_to.y);
				int w = Math.abs(pt_to.x - pt_from.x);
				int h = Math.abs(pt_to.y - pt_from.y);

				//g2.setPaint(tp);
				//g2.fillRect(x, y, w, h);	//テクスチャを先に描画

				g2.setColor(Color.red);
				for (int i = 0; i < 2; i++) {	//青色で線幅3ピクセルの枠を描く
					g2.drawRect(x + i, y + i, w - 2 * i, h - 2 * i);
					//xの始点とyの始点、画像の大きさの取得
					x1=x+i;
					y1=y+i;
					w1=w-2*i;
					h1=h-2*i;
					System.out.println("1は"+x1);
					return x1;
				}
			}
		}
	}
	public int GetVal(){
		System.out.println("GetValは"+x1);
		return x1;
	}




	class SelectiongMouseListener extends MouseAdapter {

		@Override
		public void mousePressed (MouseEvent ev) {
			pt_from.setLocation(ev.getPoint() );
		}

		@Override
		public void mouseReleased (MouseEvent ev) {
			 System.out.println("xの始点は="+x1+"yの始点は="+y1+"画像の横は="+ w1+"画像の縦は="+h1);
			//pt_from.setLocation(nullpoint);
			//pt_to.setLocation(nullpoint);
			PicSave save;
			save = new PicSave();
            save.doCapture();
		}

		@Override
		public void mouseDragged (MouseEvent ev) {
			pt_to.setLocation(ev.getPoint() );
		}

	}

	class FrameDrawer extends TimerTask {	//50ミリ秒おきに描画

		@Override
		public void run() {
			canvas.repaint();
		}

	}
	

	public static void main(String[] args) {
		new Search("Search");
	}

}