import java.applet.*;
import java.awt.*;
import java.awt.image.*;


//  filtrulin1.java

public class filtrulin1 extends Applet
{
  Image img,imgn;
  Graphics g;
  int dimlat,dimin;  //dimensiuni imagine img
  int lat,inalt;  //dimensiuni imgn
 
  public void init()
 {
    Color culoare=new Color(200,100,100);
     setBackground(culoare);
     String imaginea=getParameter("imagine");
    if (imaginea==null)
         imaginea="Andreea1.jpg" ;
    img=getImage(getCodeBase(), imaginea);
    dimlat=img.getWidth(this);
    dimin=img.getHeight(this);
    imgn=img;
 //   Image rimg;
    Panel p=new Panel();
    setLayout(new BorderLayout());
    p.add(new Button("Filtru liniar1"));
    p.add(new Button("Filtru liniar2"));
    p.add(new Button("Filtru liniar3"));
    
    add("North",p);
  //  g.drawImage(img,60,60,this);
  }
     
   
  public boolean action(Event evt, Object ob)
{
  Graphics g=getGraphics();
  inalt=imgn.getHeight(this);
  lat=imgn.getWidth(this);
  g.clearRect(60,100+dimin,60+lat,100+dimin+inalt);
  g.dispose();
  int sel=0;
  if (evt.target instanceof Button)
  {
    if (ob.equals("Filtru liniar1"))
        sel=1;
    else if (ob.equals("Filtru liniar2"))
        sel=2;
    else if (ob.equals("Filtru liniar1"))
        sel=3;
    filtrulin rim3=new filtrulin(img,sel);
    imgn=rim3.rimg;
    repaint();
   
   return true;
  }
  return false;
}
   
 

public void paint(Graphics g)
{
 g.drawImage(img,60,60,this);
 g.drawImage(imgn,100+dimlat,60,this);
         
}

public void update(Graphics g)
 {
    paint(g);
 }

}


//  filtrulin.java

import java.applet.*;
import java.awt.*;
import java.awt.image.*;


public class filtrulin extends Applet
{

//  MemoryImageSource mis;                 
  Image rimg;

  filtrulin (Image source,int select) {
//	canFilterIndexColorModel=true;
	ColorModel cm=ColorModel.getRGBdefault();
	boolean success;
        int widtho,heighto,oldi;
        int r1,b1,g1;
        int pondere[]={-1,1,-1,1,1,-1,1,-1,1};
        switch (select)
        {
            case 1:
                for (int i=0;i<9;i++)
                    pondere[i]=-1;
                pondere[5]=9;
                break;
            case 2:
                for (int i=0;i<9;i++)
                    pondere[i]=1;
                break;
            case 3:
                break;
        }
        int[] Pixo,Pixn;
	int pixelval;
	
	PixelGrabber pg;
	widtho = source.getWidth(this);
	heighto = source.getHeight(this);


	Pixo = new int[widtho*heighto];     
	Pixn = new int[widtho*heighto];     
        
	pg = new PixelGrabber(source.getSource(), 0,0,widtho,heighto,Pixo,0,widtho);

	try
	{
		success = pg.grabPixels(0);             
	}                                                                      
	catch (Exception e)
	{
		System.out.println("Eroare!! " + e);
	}

	for (int y=1; y < heighto-1; y++)
	{
	   for (int x=1; x < widtho-1; x++)
	   {
	      r1=g1=b1=0;
              int k=0;
              for (int i=y-1;i<=y+1;i++)  
              {
                 for (int j=x-1;j<=x+1;j++)
                 {
                     int r=cm.getRed(Pixo[i*widtho+j]);
                     int g=cm.getGreen(Pixo[i*widtho+j]);
	             int b=cm.getBlue(Pixo[i*widtho+j]);
	             
                     r1+=r*pondere[k];
                     g1+=g*pondere[k];
                     b1=b*pondere[k];
                     k++;
                 }
              } 
            if (select==2) {
                  r1=r1/9;
                b1=b1/9;
                g1=g1/9;
            }
              r1=Math.max(0,Math.min(r1,255));  
              g1=Math.max(0,Math.min(g1,255));  
              r1=Math.max(0,Math.min(r1,255));  
              b1=Math.max(0,Math.min(b1,255));  
              Pixn[y*widtho+x]=(0xFF000000) | (r1<<16) | (g1<<8) | (b1<<0);
          }
	}
        
        for (int x=0;x<widtho;x++) {
            Pixn[x]=Pixo[x];
            Pixn[(heighto-1)*widtho+x]=Pixo[(heighto-1)*widtho+x];
        }
        for (int y=0;y<heighto;y++) {
            Pixn[y*widtho]=Pixo[y*widtho];
            Pixn[y*widtho+widtho-1]=Pixo[y*widtho+widtho-1];
        } 
        rimg = createImage(new MemoryImageSource(widtho,heighto,Pixn,0,widtho));

  }


  public void paint (Graphics g1)
  {	
//	g1.drawImage(rimg,250,250,this);
  }


}