//  aritmetic1.java

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



public class aritmetic1 extends Applet
{
  Image img1,img2,imgn;
  Graphics g;
  int dimlat,dimin;  //dimensiuni imagine img
  int lat,inalt;  //dimensiuni imgn
 
  public void init()
 {
    Color culoare=new Color(70,150,100);
   //  setBackground(culoare);
    String imaginea1=getParameter("imagine1");
    if (imaginea1==null)
       imaginea1="didi.jpg" ;
    String imaginea2=getParameter("imagine2");
    if (imaginea2==null)
       imaginea2="lost2.jpg" ;
    
    img1=getImage(getCodeBase(), imaginea1);
    img2=getImage(getCodeBase(), imaginea2);
    
    dimlat=img1.getWidth(this);
    dimin=img1.getHeight(this);
    imgn=img1;
 //   Image rimg;
    Panel p=new Panel();
    setLayout(new BorderLayout());
    p.add(new Button("Adunare"));
    p.add(new Button("Scadere"));
     p.add(new Button("Produs"));
    p.add(new Button("Divizare"));
    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();
    if (evt.target instanceof Button)
  {
    if (ob.equals("Adunare"))
    {
        aritmetic rim1=new aritmetic(img1,img2,1);
        imgn=rim1.rimg;
    }
    if (ob.equals("Scadere"))
    {
        aritmetic rim1=new aritmetic(img1,img2,2);
        imgn=rim1.rimg;
    }
    if (ob.equals("Produs"))
    {
        aritmetic rim1=new aritmetic(img1,img2,3);
        imgn=rim1.rimg;
    }if (ob.equals("Divizare"))
    {
        aritmetic rim1=new aritmetic(img1,img2,4);
        imgn=rim1.rimg;
    }
    repaint();
   //selection=10;
   return true;
  }
  return false;
}
   
 

public void paint(Graphics g)
{
 g.drawImage(img1,60,60,this);
 g.drawImage(img2,100+dimlat,60,this);
 g.drawImage(imgn,180,100+dimin,this);
         
}

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

}



//  aritmetic.java

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



public class aritmetic extends Applet
{

//  MemoryImageSource mis;                 
  Image rimg;

  aritmetic (Image source1, Image source2, int select) {
//	canFilterIndexColorModel=true;
	ColorModel cm=ColorModel.getRGBdefault();
	boolean success;
        int widtho,heighto,oldi;
	int[] Pix1,Pix2,Pixn;
	int pixelval;
        int r,g,b,alp;
        r=b=g=alp=0;
	
	PixelGrabber pg1,pg2;
	widtho = source1.getWidth(this);
	heighto = source1.getHeight(this);


	Pix1 = new int[widtho*heighto];     
	Pix2 = new int[widtho*heighto];     
        Pixn = new int[widtho*heighto];     

	pg1 = new PixelGrabber(source1.getSource(), 0,0,widtho,heighto,Pix1,0,widtho);

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

        pg2 = new PixelGrabber(source2.getSource(), 0,0,widtho,heighto,Pix2,0,widtho);

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

        for (int y=0; y < heighto; y++)
	{
	   for (int x=0; x < widtho; x++)
	   {
		int r1=cm.getRed(Pix1[y*widtho+x]);
		int g1=cm.getGreen(Pix1[y*widtho+x]);
		int b1=cm.getBlue(Pix1[y*widtho+x]);
		int alp1=cm.getAlpha(Pix1[y*widtho+x]);
                int r2=cm.getRed(Pix2[y*widtho+x]);
		int g2=cm.getGreen(Pix2[y*widtho+x]);
		int b2=cm.getBlue(Pix2[y*widtho+x]);
		int alp2=cm.getAlpha(Pix2[y*widtho+x]);
                switch (select) {
                    case 1:
                        r=r1+r2;
                        g=g1+g2;
                        b=b1+b2;
                        alp=alp1+alp2;
                        break;
                     case 2:
                        r=r1-r2;
                        g=g1-g2;
                        b=b1-b2;
                        alp=alp1-alp2;
                        break;
                      case 3:
                        r=r1*r2;
                        g=g1*g2;
                        b=b1*b2;
                        alp=alp1*alp2;
                        break;
                       case 4:
                        r=(int)(r1/r2);
                        g=(int)(g1/g2);
                        b=(int)(b1/b2);
                        alp=(int)(alp1/alp2);
                        break;
                }
		r=Math.max(0,Math.min(255,r));
                g=Math.max(0,Math.min(255,g));
                b=Math.max(0,Math.min(255,b));
                alp=Math.max(0,Math.min(255,alp));
                
                Pixn[y*widtho+x]=(alp1<<24) | (r<<16) | (g<<8) | (b<<0);
	   }
	}

	rimg = createImage(new MemoryImageSource(widtho,heighto,Pixn,0,widtho));

  }


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


}