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

📄 bmppanel2.java

📁 用java实现的对位图文件读取的源程序代码。
💻 JAVA
字号:
/**
 *	
 *	负责显示位图,支持int[][]的矩阵数组,每一位表示一个像素
 */
import java.awt.image.*;
import java.awt.*;
import java.awt.event.*;


class BMPPanel2 extends Panel implements MouseListener,MouseMotionListener {
	
	//private Color[][] pixel;
	Image bmp;
	int[] pixel;
	
	private int bmpWidth; 	//显示的宽
	private int bmpHeight;	//显示的高
	
	private int bmpRow;		//像素的行数
	private int bmpCol;		//像素的列数
	
	private int newX0 = 0;
	private int newY0 = 0;
	
	private int oldX0 = 0;
	private int oldY0 = 0;
	
	private int mousePressedX = 0;
	private int mousePressedY = 0;
	
	private int mouseReleasedX = 0;
	private int mouseReleasedY = 0;
	
	private int mouseDraggedX = 0;
	private int mouseDraggedY = 0;
	
	private double zoomSize = 0;
	
	private boolean isDragged = false;
	
	private int drawWhich;
	private final int DRAW_BMP = 0;
	private final int DRAW_MOVE_BORDER = 1;
	private final int DRAW_ZOOM_BORDER = 2;
	private final int DRAW_ZOOMING_BORDER = 3;
	
	
	BMPPanel2() {		
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}
	
	public BMPPanel2(int[][] data) {
		this();
		setPixel(data);
	}
	
	public void drawBMP(int[][] data,int x,int y,int bmpWidth,int bmpHeight) {
		oldX0 = newX0 = x;
		oldY0 = newY0 = y;
		this.bmpWidth = bmpWidth;
		this.bmpHeight = bmpHeight;
		setPixel(data);
		repaint();
	}
	
	public void drawBMP(int[][] data,int x,int y) {
		int bmpWidth = data.length;
		int bmpHeight = data[0].length;
		drawBMP(data,x,y,bmpWidth,bmpHeight);
	}
	
	public void drawBMP(int[][] data) {
		
		int bmpHeight = data.length;
		int bmpWidth = data[0].length;
		
		int x = (this.getWidth() - bmpWidth) / 2;
		int y = (this.getHeight() - bmpHeight) / 2;
		
		drawBMP(data,x,y,bmpWidth,bmpHeight);
	}	
	
	
	public void drawBMPBaseBefore(int[][] data) {	
		drawBMP(data,oldX0,oldY0,bmpWidth,bmpHeight);
	}
		
	public void setPixel(int[][] data) {
		bmpRow = data.length;
		bmpCol = data[0].length;
		pixel = new int[bmpCol * bmpRow];
		int index = 0;
		for (int i = 0; i<bmpRow; i++) {
			for (int j = 0; j<bmpCol; j++) {
				pixel[index++] = data[i][j];
		    }
	    }
	    
	    ImageProducer ip=new MemoryImageSource(bmpCol,bmpRow,pixel,0,bmpCol) ;
        bmp = createImage(ip);
	}
	
	public int getBMPX0() {
		return newX0;
	}
	
	public int getBMPY0() {
		return newY0;
	}
	
	public int getBMPWidth() {
		return bmpWidth;
	}
	
	public int getBMPHeight() {
		return bmpHeight;
	}
	
	
	public void setDefaultSize() {
		bmpWidth = bmpCol;
		bmpHeight = bmpRow;
	}	
	
	public void setDefaultLocation() {
		newX0 = (this.getWidth() - bmpWidth) / 2;
		newY0 = (this.getHeight() - bmpHeight) / 2;
		
		oldX0 = newX0;
		oldX0 = newX0;

	}
	
	public void paint(Graphics g) {
		if (pixel == null) {
			return ;
		}
		
		switch(drawWhich) {
			case DRAW_BMP 			: drawBMP(g); 			break;
			case DRAW_MOVE_BORDER 	: drawMoveBorder(g); 	break;
			case DRAW_ZOOM_BORDER 	: drawZoomBorder(g); 	break;
		}
	}
	
	
	private void drawMoveBorder(Graphics g) {
		g.setColor(Color.GREEN);
		g.drawRect(newX0,newY0,bmpWidth,bmpHeight);
	}
	
	private void drawZoomBorder(Graphics g) {
		g.setColor(Color.BLUE);
		g.drawRect(newX0,newY0,bmpWidth,bmpHeight);
		
		g.setColor(Color.PINK);		
		g.fillRect(newX0+bmpWidth-5,newY0+bmpHeight-5,10,10);
	}
	
	private void drawBMP(Graphics g) {
		setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		g.drawImage(bmp,newX0,newY0,bmpWidth,bmpHeight,Color.RED,this);
	}

	public void drawReverseBMP() {
		
	}
	
	public void locateToCenter(){}
	

	public void mouseClicked(MouseEvent e) {
		
		if (e.getClickCount() > 1) {
			drawWhich = this.DRAW_BMP;
			return;
		}
		
		mousePressedX = e.getX();
		mousePressedY = e.getY();
		drawWhich = this.DRAW_ZOOM_BORDER;
	}
	
	public void mousePressed(MouseEvent e) {
		if (drawWhich == DRAW_ZOOM_BORDER) {
			return;
		}
		
		mousePressedX = e.getX();
		mousePressedY = e.getY();
		setCursor(new Cursor(Cursor.MOVE_CURSOR));
		drawWhich = this.DRAW_MOVE_BORDER;
	}
	
	public void mouseReleased(MouseEvent e) {	
		if(pixel == null) {
			return;
		}
		setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		
		mouseReleasedX = e.getX();
		mouseReleasedY = e.getY();
		
		switch (drawWhich) {
			case  DRAW_MOVE_BORDER	: doWhenMoveOver(); break;
			case DRAW_ZOOM_BORDER 	: doWhenZoomOver(); break;
		}
	
		drawWhich = this.DRAW_BMP;
		repaint();
	}
	
	public void doWhenZoomOver() {
		
	}
	
	public void doWhenMoveOver() {
		newX0 = oldX0 + mouseReleasedX - mousePressedX;
		newY0 = oldY0 + mouseReleasedY - mousePressedY;
		
		oldX0 = newX0;
		oldY0 = newY0;
	}
	
	public void mouseEntered(MouseEvent e) {
	}
	
	public void mouseExited(MouseEvent e) {
	}
	boolean isInZoomRect = false;
	public void mouseMoved(MouseEvent e) {
		
		if (this.drawWhich != this.DRAW_ZOOM_BORDER) {
			
			return;
		}
		int x = e.getX();
		int y = e.getY();
		
		int SEX = newX0 + bmpWidth;
		int SEY = newY0 + bmpHeight;
		
		if (x > SEX-5 && x < SEX+5 && y > SEY-5 && y < SEY+5) {
			this.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));			
			isInZoomRect = true;
		} else {
			this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
			isInZoomRect = false;
		}
	}
	
	public void mouseDragged(MouseEvent e) {
		
		mouseDraggedX = e.getX();
		mouseDraggedY = e.getY();

		
		Cursor cursor = this.getCursor();
		if (this.drawWhich == this.DRAW_MOVE_BORDER) {
			doWhenMove();
		} else if (this.drawWhich == this.DRAW_ZOOM_BORDER && isInZoomRect) {
			doWhenZoom();
		}
		
		repaint();
	}
	
	private void doWhenMove() {
		newX0 = oldX0 + mouseDraggedX - mousePressedX;
		newY0 = oldY0 + mouseDraggedY - mousePressedY;
	}
	
	private void doWhenZoom() {
		bmpWidth = mouseDraggedX - newX0;
		bmpHeight = mouseDraggedY - newY0;
		
		bmpWidth = bmpWidth < 20 ? 20 : bmpWidth;
		bmpHeight = bmpHeight < 20 ? 20 : bmpHeight;
		
	}
}

⌨️ 快捷键说明

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