⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagepanel.java

📁 用JAVA写的一个拍照程序
💻 JAVA
字号:
package org.p3p.net.common;import java.awt.BasicStroke;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import javax.swing.JPanel;import javax.swing.SwingUtilities;/** * 带背景面板 */public class ImagePanel extends JPanel implements MouseMotionListener,		MouseListener {	private Image bg;	private boolean paintBG = true;	private boolean paintSelectFlag = false;	private Rectangle rect = null, rectL_T, rectR_B, rectR_T, rectL_B;// 选择范围	private int lineSize = 10;	private int dragTarget = -1;// 左上角	private Point pyPoint = new Point(0, 0), txpyPoint = new Point(0, 0);	/**	 * Create the panel	 */	public ImagePanel() {		super();		//	}	public ImagePanel(String img) {		super();		setOpaque(true);		MediaTracker mt = new MediaTracker(this);		bg = UIHelper.getImage(img);		mt.addImage(bg, 1);		try {			mt.waitForAll();		} catch (InterruptedException e) {			e.printStackTrace();		}		addMouseMotionListener(this);		addMouseListener(this);	}	public void paintComponent(Graphics g) {		Graphics2D g2 = (Graphics2D) g;		super.paintComponent(g2);		// 执行一些初始化		if (rect == null) {			rect = new Rectangle(0, 0, 80, 80);			rect.x = (getWidth() - 80) / 2;			rect.y = (getHeight() - 80) / 2;			// 当选择框变化时,需要及时更新此两个框的X,Y			rectL_T = new Rectangle(rect.x, rect.y, lineSize, lineSize);			rectR_B = new Rectangle(rect.x + rect.width - lineSize, rect.y					+ rect.height - lineSize, lineSize, lineSize);			rectR_T = new Rectangle(rect.x + rect.width - lineSize, rect.y,					lineSize, lineSize);			rectL_B = new Rectangle(rect.x, rect.y + rect.height - lineSize,					lineSize, lineSize);		}		if (paintBG) {			// 只绘制部分图像			g2.drawImage(bg, 0, 0, getWidth(), getHeight(), txpyPoint.x / 10,					txpyPoint.y / 10, txpyPoint.x / 10 + getWidth(),					txpyPoint.y / 10 + getHeight(), null);			if (paintSelectFlag) {				// 画选择范围				// g2.setColor(new Color(0x336699));				g2.setStroke(new BasicStroke(4));				// 左上				g2.drawLine(rect.x, rect.y, rect.x, rect.y + lineSize);				g2.drawLine(rect.x, rect.y, rect.x + lineSize, rect.y);				// 右上				g2.drawLine(rectR_T.x, rectR_T.y, rectR_T.x + rectR_T.width,						rectR_T.y);				g2.drawLine(rectR_T.x + rectR_T.width, rectR_T.y, rectR_T.x						+ rectR_T.width, rectR_T.y + rectR_T.height);				// 左下				g2.drawLine(rectL_B.x, rectL_B.y, rectL_B.x, rectL_B.y						+ rectL_B.height);				g2.drawLine(rectL_B.x, rectL_B.y + rectL_B.height, rectL_B.x						+ rectL_B.width, rectL_B.y + rectL_B.height);				// 右下				g2.drawLine(rect.x + rect.width - lineSize, rect.y						+ rect.height, rect.x + rect.width, rect.y						+ rect.height);				g2.drawLine(rect.x + rect.width, rect.y + rect.height						- lineSize, rect.x + rect.width, rect.y + rect.height);			}		}	}	/**	 * 	 * @param x	 * @param y	 * @param r	 * @return	 */	private boolean inRectangle(int x, int y, Rectangle r) {		return x > r.x && x < r.x + r.width && y > r.y && y < r.y + r.height;	}	/**	 * 	 * @param bg	 */	public void setBackground(Image bg) {		this.bg = null;		this.bg = bg;	}	public boolean isPaintBG() {		return paintBG;	}	public void setPaintBG(boolean paintBG) {		this.paintBG = paintBG;	}	public boolean isPaintSelectFlag() {		return paintSelectFlag;	}	public void setPaintSelectFlag(boolean paintSelectFlag) {		this.paintSelectFlag = paintSelectFlag;	}	public Rectangle getRect() {		return rect;	}	public void setRect(Rectangle rect) {		this.rect = rect;	}	public void mouseDragged(MouseEvent e) {		// TODO 自动生成方法存根		if (dragTarget < 0) {			return;		} else if (dragTarget == 0) {			rectL_T.x = e.getX() - pyPoint.x;			rectL_T.y = e.getY() - pyPoint.y;			// 调整相关节点位置			rectR_T.y = rectL_T.y;			rectL_B.x = rectL_T.x;			rect.width += rect.x - rectL_T.x;			rect.height += rect.y - rectL_T.y;			rect.x = rectL_T.x;			rect.y = rectL_T.y;		} else if (dragTarget == 3) {			rectR_B.x = e.getX() - pyPoint.x;			rectR_B.y = e.getY() - pyPoint.y;			// 调整相关节点位置			rectR_T.x = rectR_B.x;			rectL_B.y = rectR_B.y;			rect.width += rectR_B.x + rectR_B.width - rect.x - rect.width;			rect.height += rectR_B.y + rectR_B.height - rect.y - rect.height;		} else if (dragTarget == 4) {			rect.x = e.getX() - pyPoint.x;			rect.y = e.getY() - pyPoint.y;			// 需要修改四个			rectL_T.x = rect.x;			rectL_T.y = rect.y;			rectR_T.x = rect.x + rect.width - lineSize;			rectR_T.y = rect.y;			rectL_B.x = rect.x;			rectL_B.y = rect.y + rect.height - lineSize;			rectR_B.x = rect.x + rect.width - lineSize;			rectR_B.y = rect.y + rect.height - lineSize;		} else if (dragTarget == 9) {			txpyPoint.x -= e.getX() - pyPoint.x;			txpyPoint.y -= e.getY() - pyPoint.y;		}	}	public void mouseMoved(MouseEvent e) {		// TODO 自动生成方法存根	}	public void mouseClicked(MouseEvent e) {		// TODO 自动生成方法存根	}	public void mouseEntered(MouseEvent e) {		// TODO 自动生成方法存根	}	public void mouseExited(MouseEvent e) {		// TODO 自动生成方法存根	}	public void mousePressed(MouseEvent e) {		// TODO 自动生成方法存根		dragTarget = -1;		if (!paintSelectFlag) {			dragTarget = 9;			pyPoint.x = e.getX();			pyPoint.y = e.getY();			return;		}		if (inRectangle(e.getX(), e.getY(), rectL_T)) {			dragTarget = 0;			pyPoint.x = e.getX() - rectL_T.x;			pyPoint.y = e.getY() - rectL_T.y;		} else if (inRectangle(e.getX(), e.getY(), rectR_T)) {			dragTarget = 1;			pyPoint.x = e.getX() - rectR_T.x;			pyPoint.y = e.getY() - rectR_T.y;		} else if (inRectangle(e.getX(), e.getY(), rectL_B)) {			dragTarget = 2;			pyPoint.x = e.getX() - rectL_B.x;			pyPoint.y = e.getY() - rectL_B.y;		} else if (inRectangle(e.getX(), e.getY(), rectR_B)) {			dragTarget = 3;			pyPoint.x = e.getX() - rectR_B.x;			pyPoint.y = e.getY() - rectR_B.y;		} else if (inRectangle(e.getX(), e.getY(), rect)) {			dragTarget = 4;			pyPoint.x = e.getX() - rect.x;			pyPoint.y = e.getY() - rect.y;		} else {			dragTarget = 9;			pyPoint.x = e.getX();			pyPoint.y = e.getY();		}	}	public void mouseReleased(MouseEvent e) {		// TODO 自动生成方法存根		if (dragTarget > -1) {			SwingUtilities.updateComponentTreeUI(this);			pyPoint.x = 0;			pyPoint.y = 0;			dragTarget = -1;		}	}	private Object obj = new Object();	public void changeBGSize(int flag) {		float zl = 1 + flag * 0.1f;		int w = (int) (bg.getWidth(this) * zl), h = (int) (bg.getHeight(this) * zl);		if (w <= 0 || h <= 0) {			return;		}		synchronized (obj) {			Image __bg = bg.getScaledInstance(w, h, Image.SCALE_SMOOTH);			setBackground(__bg);			repaint();		}	}	/**	 * 返回选择图像	 * 	 * @return	 */	public BufferedImage getSelectedImage() {		// 取得选择的图像		Rectangle selectedRect = null;		if (!paintSelectFlag) {			selectedRect = new Rectangle(0, 0, getWidth(), getHeight());		} else {			selectedRect = rect;		}		BufferedImage img = new BufferedImage(selectedRect.width,				selectedRect.height, BufferedImage.TYPE_3BYTE_BGR);		Graphics2D g = (Graphics2D) img.getGraphics();		// 只画局部 需要添加偏移量		g.drawImage(bg, 0, 0, selectedRect.width, selectedRect.height,				selectedRect.x + txpyPoint.x / 10, selectedRect.y + txpyPoint.y						/ 10, selectedRect.x + selectedRect.width + txpyPoint.x						/ 10, selectedRect.y + selectedRect.height						+ txpyPoint.y / 10, null);		g = null;		return img;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -