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

📄 fenge.java

📁 使用JAVA程序语言
💻 JAVA
字号:
import java.awt.*;
import java.awt.image.*;
import java.applet.*;

public class fenge extends Applet
{
 Image img,pic;
 static int[] pixels1; 
 static int w,h; 
 static int[] p1;
 public  void init()
 {
 try
  {
   img=getImage(getDocumentBase(),"1.jpg");
   MediaTracker mt= new MediaTracker(this);//跟踪多种媒体对象状态
   mt.addImage(img,0);//向此媒体跟踪器正在跟踪的图像列表添加一个图像
   mt.waitForID(0);//开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。
   w=img.getWidth(null);//获得图像宽
   h=img.getHeight(null);//获得图像高
   pixels1=new int [w*h];
   p1=new int[w*h+1];
   for(int i=0;i<w*h;i++)
	 {p1[i]=0;}
   PixelGrabber grabber=new PixelGrabber(img,0,0,w,h,pixels1,0,w);
   grabber.grabPixels();  
   incise() ;//切割函数的调用
   pic=createImage(new MemoryImageSource(w,h,pixels1,0,w));
  }catch(InterruptedException e){};  
 } 
 public static void incise() 
 {
//图象切割主要有从头到尾,从尾到头,从上到下,从左到右及柔化处理
//图象切割主要分为三步
//先去边框外的背景,即下面的scanHead_to_End()函数scanEnd_to_Head()函数
//再去其边框,即下面的scanLift_to_Right()函数和scanUp_to_Down()函数
//最后去边框里的背景,即在调用scanHead_to_End()函数scanEnd_to_Head()函数即可
//具体在下函数里实现
	 scanHead_to_End();
	 scanEnd_to_Head();
	 scanLift_to_Right();
	 scanUp_to_Down();
	 scanEnd_to_Head();
	 scanHead_to_End();
	 scanLift_to_Right();
	 scanUp_to_Down();	 
 }
 public static void scanHead_to_End()
 {
//从头到尾处理函数的基本思想是:首先将前一部分点加进集合,即p1[i]=1;
//并令其像素值为一白色,即pixels1[i]=2147483647;
//表示已处理过,然后从下一点开始,判断其本身的像素值和其上或左一点的像素值
//如果两条件同时满足的话,表明此点为要去的点,即作p1[i]=1和pixels1[i]=2147483647处理
//这样循环到尾能把边框外的背景去掉
//但右下角没法去掉,所以还要调用从尾到头函数,其基本算法和此函数相同,下面就不在介绍
	 int i,m,n,t1=0,t2=0;	   
	   for(i=0;i<2000;i++)
	   { 
		   p1[i]=1;
		   pixels1[i]=2147483647;
	  }
	   for(i=2000;i<w*h;i++)
	   {
		   t1=0;t2=0;
		   m=i-w;//取上一点
		   n=i-1;//取左一点
		   if(pixels1[i]<=-13777216)
		  {
			      if(p1[m]==1)
			           t1=1;
			      if(p1[n]==1)
			    	  t2=1;
		  }

		   if(t1==1||t2==1)  
			   { p1[i]=1;  pixels1[i]=2147483647 ; }
		   else  if(pixels1[i]==2147483647) p1[i]=1;		   
	   }
 }
 public static void scanEnd_to_Head()
 {//和上一函数做法基本相同
	 int i,m,n,t1=0,t2=0;
	  for(i=w*h-1;i>w*h-2000;i--)
	  {
		  p1[i]=1;
	  }
	   for(i=w*h-2000;i>0;i--)
	   {
		   t1=0;t2=0;
		   m=i+w;//取下点
		   n=i+1;//取右一点
	     if(pixels1[i]<=-13777216)
			  {
		
				if(p1[n]==1)
				   t2=1;				     
				if(p1[m]==1)
				     t1=1;			     
			  }
		   if(t1==1||t2==1)  
		   { p1[i]=1;  pixels1[i]=2147483647 ; }
	       else  if(pixels1[i]==2147483647) p1[i]=1;
	   }
 }
 public static void scanLift_to_Right()
 {
//此函数能去掉部分边框
//具体算法思想是:先处理左边边框,从头到尾循环,若此点不在集合p1里
//在判断此点左边一点在不在p1里,若在p1里
//在判断右边几点,比如5点的像素值属不属于背景色
//以上三点同时满足的话,就可以判定这点是边框,
//把这点加进p1集合即p1[i]=1和把其像素值令为白即pixels1[i]=2147483647;
//这样能处理掉左边边框,右边也同样处理即可	 
	 int i,x,t1,t2;
	 for(i=2000;i<w*h;i++)
	 {
		 t1=0;t2=0;
		 x=i%w;
	     if(p1[i]!=1)
	    {
		   if(x<=256)
		   {
			 for(int j=1;j<5;j++)
				 if((x-j>0)&&(pixels1[i-j]==2147483647))
				 {t1=1;j=16;}
			 for(int j=1;j<8;j++)
				 if((pixels1[i+j]<=-13777216))
				 {t2=1;j=16;}
			 if(t1==1&&t2==1)
			 { p1[i]=1;pixels1[i]=2147483647;}
		   }
		  else
		  {

				 for(int j=1;j<5;j++)
					 if((pixels1[i-j]==2147483647)||(pixels1[i-j]<=-13777216))
					   {t1=1;j=16;}
				 for(int j=1;j<5;j++)
					 if((x+j<512)&&(pixels1[i+j]==2147483647))
					 {t2=1;j=16;}
				 if(t1==1&&t2==1)
				 { p1[i]=1;pixels1[i]=2147483647;}			   
		  }
	 }
	 }
 }
 public static void scanUp_to_Down()
 {
//此函数的功能主要是去掉其上下部分的边框
//基本算法与上一函数相同	 
     int i,y,t1,t2;    
	 for(i=2000;i<w*h;i++)
	 {
		 t1=0;t2=0;
		 y=i/w+1;
		 if(p1[i]!=2147483647)
		 {
			 if(y<=256)
			 {
				 for(int j=1;j<5;j++)
					 if(y-j>0&&pixels1[i-j*w]==2147483647)
					 {t1=1;j=16;}
				 for(int j=1;j<5;j++)
					 if((pixels1[i+j*w]==2147483647)||(pixels1[i+j*w]<=-15777216))
					 {t2=1;j=16;}
				 if(t1==1&&t2==1)
				 {p1[i]=1;	pixels1[i]=2147483647; }
			 }
			 else
			 {
				 for(int j=1;j<8;j++)
					 if((y+j<512)&&pixels1[i+j*w]==2147483647)
					 {t1=1;j=16;}
				 for(int j=1;j<8;j++)
					 if((pixels1[i-j*w]==2147483647)||(pixels1[i-j*w]<=-13777216))
					 {t2=1;j=16;}
				 if(t1==1&&t2==1)
				 {p1[i]=1;	pixels1[i]=2147483647; }
			 }
		 }
	 }
 }
 public void paint (Graphics g)
 {
  g.drawImage(img,20,0,300,300,null);
  g.drawImage(pic,330,0,300,300,null);
 }
 }

⌨️ 快捷键说明

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