// histograma.html


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



public class histograma extends Applet
{
  Image img,imgn;
  Graphics gg;
  int Hist[]=new int[256];
  int max=0;
  int dimlat,dimin;  //dimensiuni imagine img
  int lat,inalt;  //dimensiuni imgn
 
  public void init()
 {
    Color culoare=new Color(100,200,200);
     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("Histograma"));
    add("North",p);
  }
     
   
  public boolean action(Event evt, Object ob)
{
  
  Graphics gg=getGraphics();
  inalt=imgn.getHeight(this);
  lat=imgn.getWidth(this);
  gg.clearRect(60,100+dimin,60+lat,100+dimin+inalt);
  gg.dispose();
  for (int i=0;i<256;i++)
      Hist[i]=0;
  if (evt.target instanceof Button)
  {
  
      ColorModel cm=ColorModel.getRGBdefault();
	boolean success;
        int widtho,heighto,oldi;
	int[] Pixo,Pixn;
	int pixelval;
	
	PixelGrabber pg;
	widtho = img.getWidth(this);
	heighto = img.getHeight(this);


	Pixo = new int[widtho*heighto];     
	Pixn = new int[widtho*heighto];     

	pg = new PixelGrabber(img.getSource(), 0,0,widtho,heighto,Pixo,0,widtho);

	try
	{
		success = pg.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 r=cm.getRed(Pixo[y*widtho+x]);
		int g=cm.getGreen(Pixo[y*widtho+x]);
		int b=cm.getBlue(Pixo[y*widtho+x]);
		int alp=cm.getAlpha(Pixo[y*widtho+x]);
                int gray=(r+g+b)/3;
                Hist[gray]++;
           }
           for (int i=0;i<256;i++)
           {    if (Hist[i]>max)
                    max=Hist[i];
           }
	}

      
    repaint();
   //selection=10;
   return true;
  }
  return false;
}
   
 

public void paint(Graphics g)
{
 char sir[]={'2','5','5'};
 g.drawImage(img,50,60,this);
 g.setColor(Color.red);
 g.drawLine(80+dimlat,260,80+dimlat+256,260);
 g.drawLine(80+dimlat,260,80+dimlat,60);
 g.drawChars(sir,0,3,80+dimlat+250,275);
/* sir="0".toCharArray();
 char sir1[]={'0'};
 g.drawChars(sir1,0,3,65+dimlat,275); */
 sir=(String.valueOf(max)).toCharArray();
 g.drawChars(sir,0,3,80+dimlat-25,70);
 Color culoare=new Color(70,70,70);
 g.setColor(culoare);
 for (int i=0;i<256;i++)
      g.drawLine(80+dimlat+i,260,80+dimlat+i,260-(Hist[i]*200/max));
 g.dispose();
}

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

}