📄 difference.java
字号:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.awt.event.*;
public class difference extends JFrame
{
private final int COLOR_DIFFERENCE=25;
private final int DIFFERENCE_TIMES=0;
private BufferedImage imageOrgOld;
private BufferedImage imageOrg;
private BufferedImage differenceImageOld;
private BufferedImage differenceImage;
private BufferedImage diffOrgImage;
private int threshold = 200;
private Color on = Color.white;
private Color off = Color.black;
private Color move = Color.green;
private int cal[][];
private int moveCenter[]={0,0};
private noiceHandle noiceHandler=new noiceHandle();
private movementIdentify movementIdentifer=new movementIdentify();
public difference(BufferedImage imageOrg)
{
addWindowListener(new WindowListener());
this.imageOrg=imageOrg;
// setSize(imageOrg.getWidth(this)+20,imageOrg.getHeight(this)+50);
cal=new int[imageOrg.getWidth(this)][imageOrg.getHeight(this)];
for(int loop1 = 0; loop1 < imageOrg.getWidth(this); loop1++)
for(int loop2 = 0; loop2 < imageOrg.getHeight(this); loop2++)cal[loop1][loop2]=0;
// setLocation(380,0);
// setVisible(true);
// setBackground(Color.black);
}
public BufferedImage doProcess(BufferedImage imageOrg)
{
if(imageOrgOld!=null)
{
this.imageOrg=imageOrg;
differenceImage = new BufferedImage(imageOrg.getWidth(this), imageOrg.getHeight(this), BufferedImage.TYPE_INT_ARGB);
diffOrgImage = new BufferedImage(imageOrg.getWidth(this), imageOrg.getHeight(this), BufferedImage.TYPE_INT_ARGB);
for(int loop1 = 0; loop1 < imageOrg.getWidth(this); loop1++)
{
for(int loop2 = 0; loop2 < imageOrg.getHeight(this); loop2++)
{
Color pixelOld = new Color(imageOrgOld.getRGB(loop1,loop2));
Color pixel = new Color(imageOrg.getRGB(loop1,loop2));
try{
Color pixelDiffOld = new Color(differenceImageOld.getRGB(loop1,loop2));
}catch(NullPointerException e){}
int numberRGB[]=new int[3];
numberRGB[0]=Math.abs(pixelOld.getRed()-pixel.getRed());
numberRGB[1]=Math.abs(pixelOld.getGreen()-pixel.getGreen());
numberRGB[2]=Math.abs(pixelOld.getBlue()-pixel.getBlue());
if(numberRGB[0]<COLOR_DIFFERENCE||numberRGB[1]<COLOR_DIFFERENCE||numberRGB[2]<COLOR_DIFFERENCE)
{
if(cal[loop1][loop2]==0)differenceImage.setRGB(loop1,loop2,off.getRGB());
else cal[loop1][loop2]=0;
}
else
{
if(cal[loop1][loop2]==DIFFERENCE_TIMES)differenceImage.setRGB(loop1,loop2,on.getRGB());
else cal[loop1][loop2]++;
}
}
}
differenceImage=noiceHandler.noiceReduce(differenceImage);
differenceImage=noiceHandler.imageRecover(differenceImage);
differenceImage=movementIdentifer.identify(differenceImage);
for(int loop1 = 0; loop1 < imageOrg.getWidth(this); loop1++)
{
for(int loop2 = 0; loop2 < imageOrg.getHeight(this); loop2++)
{
if(differenceImage.getRGB(loop1,loop2)==on.getRGB())diffOrgImage.setRGB(loop1,loop2,move.getRGB());
else diffOrgImage.setRGB(loop1,loop2,imageOrg.getRGB(loop1,loop2));
}
}
moveCenter=movementIdentifer.movementCenter(moveCenter[0],moveCenter[1]);
for(int x=-4;x<=4;x++)
{
for(int y=-4;y<=4;y++)
{
try
{
if(Math.abs(Math.sqrt((double)x*(double)x+(double)y*(double)y))<=2)diffOrgImage.setRGB(moveCenter[0]+x,moveCenter[1]+y,on.getRGB());
if(Math.abs(Math.sqrt((double)x*(double)x+(double)y*(double)y))>=4)diffOrgImage.setRGB(moveCenter[0]+x,moveCenter[1]+y,on.getRGB());
}catch(ArrayIndexOutOfBoundsException e){}
}
}
repaint();
}
imageOrgOld=imageOrg;
differenceImageOld=differenceImage;
return diffOrgImage;
}
public boolean movementWarning(int degree)
{
if(movementIdentifer.movementDegree()>=degree)return(true);
return(false);
}
/*
public void paint(Graphics g)
{
if (differenceImage != null)
{
g.drawImage(diffOrgImage,10,40,this);
}
}
public void update(Graphics g)
{
paint(g);
}
*/
class WindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -