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

📄 graphkw.java

📁 java图形操作小软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
}

//MyCanvas	//画布类=======================================


class MyCanvas extends Panel {
	private BMPFile bitmap;
	public boolean file_loaded;
	public boolean flag_changed;
	public boolean flag_redo_or_undo;

	private Scrollbar hBar, vBar;
	private Dimension size;


	MyCanvas() {
		super();
		file_loaded=false;
		flag_changed=false;
		flag_redo_or_undo=false;
		bitmap=new BMPFile();

		hBar=new Scrollbar(Scrollbar.HORIZONTAL);
		hBar.setEnabled(false);
		hBar.setFocusable(false);
		hBar.setValue(0);

		vBar=new Scrollbar(Scrollbar.VERTICAL);
		vBar.setEnabled(false);
		vBar.setFocusable(false);
		vBar.setValue(0);

		setLayout(new BorderLayout());
		add(hBar, BorderLayout.SOUTH);
		add(vBar, BorderLayout.EAST);

		hBar.addAdjustmentListener(new AdjustmentListener()  {
			public void adjustmentValueChanged(AdjustmentEvent e) {
				repaint();
	        	}
        	});

		vBar.addAdjustmentListener(new AdjustmentListener()  {
			public void adjustmentValueChanged(AdjustmentEvent e) {
				repaint();
	        	}
        	});
	}

	public void load(String filename) {
		if (bitmap.load(filename)==true) {
			System.out.println("File load success!");
			file_loaded=true;
			flag_changed=false;
			flag_redo_or_undo=false;

		} else {
			System.out.println("File load failed!");
			file_loaded=false;
			flag_changed=false;
			flag_redo_or_undo=false;
		}

		hBar.setValue(0);
		vBar.setValue(0);

		repaint();
	}

	public void save() {
		if (bitmap.save()==true) {
			System.out.println("File save success!");
			flag_changed=false;
		} else {
			System.out.println("File save failed!");
		}
	}

	public void saveAs(String filename) {
		if (bitmap.saveAs(filename)==true) {
			System.out.println("File save as success!");
			file_loaded=true;
			flag_changed=false;
			flag_redo_or_undo=false;
		} else {
			System.out.println("File save as failed!");
		}
	}

	public void doFileter(String opt) {
		if (bitmap.doFileter(opt)==true) {
			flag_changed=true;
			flag_redo_or_undo=false;
		}
		repaint();
	}

	public void undo() {
		flag_redo_or_undo=!flag_redo_or_undo;
		flag_changed=true;
		bitmap.undo();
		repaint();
	}

	public void paint(Graphics g) {
		if (file_loaded==false) return;

		size=bitmap.getSize();

		int img_w=(int)size.getWidth();
		int img_h=(int)size.getHeight();
		int hb=(int)(hBar.getWidth()-vBar.getWidth());
		int vb=(int)vBar.getHeight();

		int x_max=img_w-hb;
		int y_max=img_h-vb;

		hBar.setEnabled(x_max>0);
		vBar.setEnabled(y_max>0);

		hBar.setMaximum(img_w);
		vBar.setMaximum(img_h);

		int x=hBar.getValue();
		int y=vBar.getValue();

		hBar.setBlockIncrement((int)size.getWidth()/5);
		hBar.setVisibleAmount(hb);

		vBar.setBlockIncrement((int)size.getHeight()/5);
		vBar.setVisibleAmount(vb);

		if (x_max<0) x=x_max/2;
		if (y_max<0) y=y_max/2;

		g.drawImage(bitmap.getMemoryMap(), -x, -y, this);
		super.paint(g);
	}
}

//图像算法======================================================================
abstract class NineGridTemplet {
	protected MemoryMap map;
	protected int height, width;
	protected int x, y;

	public void start(MemoryMap m_map) {
		x=0;
		y=0;
		map=m_map;
		width=map.getWidth();
		height=map.getHeight();
	}

	protected boolean atEdge() {
		return (x==0 || x==width-1 || y==0 || y==height-1);
	}

	public abstract int getNextValue();
}

class G_XX extends NineGridTemplet {	//线性均值滤波
	public int getNextValue() {
		int i=0, j=0, k=0;
		boolean b=atEdge();
		if (!b) {
			i= (	map.getRed(x-1, y-1) + map.getRed(x, y-1) + map.getRed(x+1, y-1)+
				map.getRed(x-1, y)   + map.getRed(x, y)   + map.getRed(x+1, y)+
				map.getRed(x-1, y+1) + map.getRed(x, y+1) + map.getRed(x+1, y+1)
				) / 9;
			j= (	map.getGreen(x-1, y-1) + map.getGreen(x, y-1) + map.getGreen(x+1, y-1)+
				map.getGreen(x-1, y)   + map.getGreen(x, y)   + map.getGreen(x+1, y)+
				map.getGreen(x-1, y+1) + map.getGreen(x, y+1) + map.getGreen(x+1, y+1)
				) / 9;
			k= (	map.getBlue(x-1, y-1) + map.getBlue(x, y-1) + map.getBlue(x+1, y-1)+
				map.getBlue(x-1, y)   + map.getBlue(x, y)   + map.getBlue(x+1, y)+
				map.getBlue(x-1, y+1) + map.getBlue(x, y+1) + map.getBlue(x+1, y+1)
				) / 9;
		}

		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (b) return map.getRGB(x, y);
		else return ((i<<16) + (j<<8) + k) & (65535*256-1);
	}
}

class G_ZZ extends NineGridTemplet {	//中值滤波
	private int n[], i, j, k, r, g, b;

	public int getNextValue() {
		if (n==null) n=new int[9];
		boolean bo=atEdge();

		if (!bo) {
			n[0]=map.getRGB(x-1, y-1);
			n[1]=map.getRGB(x+1, y-1);
			n[2]=map.getRGB(x, y-1);
			n[3]=map.getRGB(x-1, y);
			n[4]=map.getRGB(x, y);
			n[5]=map.getRGB(x+1, y);
			n[6]=map.getRGB(x-1, y+1);
			n[7]=map.getRGB(x, y+1);
			n[8]=map.getRGB(x+1, y+1);

			for (i=7; i>=0; i--)
				for (j=0; j<=i; j++)
					if (n[j]>n[j+1]) {
						k=n[j];
						n[j]=n[j+1];
						n[j+1]=k;
					}
			r=(n[4]>>16) & 255;
			for (i=0; i<=8; i++) n[i]=n[i] & 65535;

			for (i=7; i>=0; i--)
				for (j=0; j<=i; j++) {
					if (n[j]>n[j+1]) {
						k=n[j];
						n[j]=n[j+1];
						n[j+1]=k;
					}
				}
			g=(n[4]>>8) & 255;
			for (i=0; i<=8; i++) n[i]=n[i] & 255;

			for (i=7; i>=0; i--)
				for (j=0; j<=i; j++) {
					if (n[j]>n[j+1]) {
						k=n[j];
						n[j]=n[j+1];
						n[j+1]=k;
					}
				}
			b=n[4] & 255;
		}

		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (bo) return map.getRGB(x, y);
		else return ((r<<16) + (g<<8) + b) & (65535*256-1);
	}
}

class G_BY extends NineGridTemplet {	//边缘识别
	public int getNextValue() {
		int i=0, j=0, k=0;
		boolean b=atEdge();
		if (!b) {
			i= -map.getRed(x-1, y-1) - map.getRed(x, y-1) - map.getRed(x+1, y-1)  
			   -map.getRed(x-1, y)   + 8*map.getRed(x, y) - map.getRed(x+1, y)
			   -map.getRed(x-1, y+1) - map.getRed(x, y+1) - map.getRed(x+1, y+1);
			if (i<0) i=0;
			i=i&255;
			j= -map.getGreen(x-1, y-1) - map.getGreen(x, y-1) - map.getGreen(x+1, y-1)
			   -map.getGreen(x-1, y)   + 8*map.getGreen(x, y) - map.getGreen(x+1, y)
			   -map.getGreen(x-1, y+1) - map.getGreen(x, y+1) - map.getGreen(x+1, y+1);
			if (j<0) j=0;
			j=j&255;
			k= -map.getBlue(x-1, y-1) - map.getBlue(x, y-1) - map.getBlue(x+1, y-1)	
			   -map.getBlue(x-1, y)	  + 8*map.getBlue(x, y) - map.getBlue(x+1, y)
			   -map.getBlue(x-1, y+1) - map.getBlue(x, y+1) - map.getBlue(x+1, y+1);
			if (k<0) k=0;
			k=k&255;
		}

		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (b) return map.getRGB(x, y);
		else return ((i<<16) + (j<<8) + k) & (65535*256-1);
	}
}


class X_MOHU extends NineGridTemplet {	//横向模糊
	protected boolean atEdge() {
		return (x<=2 || x>=width-3);
	}
	public int getNextValue() {
		int i=0, j=0, k=0;
		boolean b=atEdge();
		if (!b) {
			i= (map.getRed(x-3, y)   +map.getRed(x-2, y) + map.getRed(x-1, y) + map.getRed(x, y) + map.getRed(x+1, y) + map.getRed(x+2, y) + map.getRed(x+3, y))/7;
			j= (map.getGreen(x-3, y)   +map.getGreen(x-2, y) + map.getGreen(x-1, y) + map.getGreen(x, y) + map.getGreen(x+1, y) + map.getGreen(x+2, y) + map.getGreen(x+3, y))/7;
			k= (map.getBlue(x-3, y)   +map.getBlue(x-2, y) + map.getBlue(x-1, y) + map.getBlue(x, y) + map.getBlue(x+1, y) + map.getBlue(x+2, y) + map.getBlue(x+3, y))/7;
		}

		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (b) return map.getRGB(x, y);
		else return ((i<<16) + (j<<8) + k) & (65535*256-1);
	}
}



class Y_MOHU extends NineGridTemplet {	//竖向模糊
	protected boolean atEdge() {
		return (y<=2 || y>=height-3);
	}
	public int getNextValue() {
		int i=0, j=0, k=0;
		boolean b=atEdge();
		if (!b) {
			i= (map.getRed(x,y-3)   +map.getRed(x,y-2) + map.getRed(x,y-1) + map.getRed(x,y) + map.getRed(x,y+1) + map.getRed(x,y+2) + map.getRed(x,y+3))/7;
			j= (map.getGreen(x,y-3)   +map.getGreen(x,y-2) + map.getGreen(x,y-1) + map.getGreen(x,y) + map.getGreen(x,y+1) + map.getGreen(x,y+2) + map.getGreen(x,y+3))/7;
			k= (map.getBlue(x,y-3)   +map.getBlue(x,y-2) + map.getBlue(x,y-1) + map.getBlue(x,y) + map.getBlue(x,y+1) + map.getBlue(x,y+2) + map.getBlue(x,y+3))/7;
		}
		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (b) return map.getRGB(x, y);
		else return ((i<<16) + (j<<8) + k) & (65535*256-1);
	}
}

class FUDIAO extends NineGridTemplet {		//浮雕效果
	public int getNextValue() {
		int i=0, j=0, k=0;
		boolean b=atEdge();
		if (!b) {
			i= -map.getRed(x-1, y-1) + map.getRed(x+1, y-1)  
			   -map.getRed(x-1, y)   + map.getRed(x+1, y)
			   -map.getRed(x-1, y+1) + map.getRed(x+1, y+1);
			if (i<0) i=255;
			else 	if(i>764)i=0;
				else i=128;


			j= -map.getGreen(x-1, y-1) + map.getGreen(x+1, y-1)  
			   -map.getGreen(x-1, y)   + map.getGreen(x+1, y)
			   -map.getGreen(x-1, y+1) + map.getGreen(x+1, y+1);
			if (j<0) j=255;
			else 	if(j>764)j=0;
				else j=128;

			k= -map.getBlue(x-1, y-1) + map.getBlue(x+1, y-1)  
			   -map.getBlue(x-1, y)   + map.getBlue(x+1, y)
			   -map.getBlue(x-1, y+1) + map.getBlue(x+1, y+1);
			if (k<0) k=255;
			else 	if(k>764)k=0;
				else k=128;
		}

		x++;
		if (x>=width) {
			x=0;
			y++;
		}
		if (y>=height) y=0;

		if (b) return map.getRGB(x, y);
		else return ((i<<16) + (j<<8) + k) & (65535*256-1);
	}
}

⌨️ 快捷键说明

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