/** Affichage d'images : Exercise 2
 *
 *	@version 0.9  12/07/2001
 *	@author Pascal Vuylsteker
 */
 
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.awt.geom.*;

//  Just Change the Image path at line 46

public class getSubImageBug extends JFrame	{	

	public getSubImageBug()	{
		setTitle("Here is a pretty picture");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ShowPanel panel = new ShowPanel();
		Container contentPane = getContentPane();
		contentPane.add(panel);
		setBounds(0,0,600,600);		

	}
	
	public static void main(String[] args)	{		
		getSubImageBug frame = new getSubImageBug();
		frame.show();
	}
	
}


class ShowPanel extends JPanel 	{	
	ShowPanel()	{	
	
		setBackground(Color.white);
		setBounds(0,0,500,500);		

		
		Toolkit	tk = Toolkit.getDefaultToolkit();
		
		img = tk.getImage("AnyImage.gif");
		
		try	{
        	MediaTracker tracker = new MediaTracker(this);
        	tracker.addImage(img, 0);
        	tracker.waitForID(0);
        }
        catch ( Exception e ) {}
        
		
		img = img.getScaledInstance(200, 200, Image.SCALE_SMOOTH);
		try	{
        	MediaTracker tracker = new MediaTracker(this);
        	tracker.addImage(img, 0);
        	tracker.waitForID(0);
        }
        catch ( Exception e )	{}

		GraphicsEnvironment local = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice screen = local.getDefaultScreenDevice();
		GraphicsConfiguration configuration = screen.getDefaultConfiguration();
		
 		bi = configuration.createCompatibleImage(200, 200);

// 		bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
		biContext = bi.createGraphics();
		biContext.drawImage(img, 0, 0, null);
		
		biContext.setPaint(Color.red);
		biContext.draw(new Line2D.Double(0,0,199,199));
		
		System.out.println("bi size  : "+ bi.getWidth() +" / "+ bi.getHeight()  +" / "+ bi);

		try	{
		lbi = bi.getSubimage(1,1,99,99);
		}
		catch (Exception e )	{
			System.out.println("Voila ou est le pb  : " + e);
		}
		
		System.out.println("lbi size  : "+ lbi.getWidth() +" / "+ lbi.getHeight()  +" / "+ lbi);
		 
		try	{
        	MediaTracker tracker = new MediaTracker(this);
        	tracker.addImage(lbi, 0);
        	tracker.waitForID(0);
        }
        catch ( Exception e )	{}

		lbi2 = bi.getSubimage(50,0,50,30);
		try	{
        	MediaTracker tracker = new MediaTracker(this);
        	tracker.addImage(lbi, 0);
        	tracker.waitForID(0);
        }
        catch ( Exception e )	{}

		System.out.println("lbi2 size  : "+ lbi2.getWidth() +" / "+ lbi2.getHeight()  +" / "+ lbi2);


		lbi3 = bi.getSubimage(50,50,100,100);
		try	{
        	MediaTracker tracker = new MediaTracker(this);
        	tracker.addImage(lbi, 0);
        	tracker.waitForID(0);
        }
        catch ( Exception e )	{}

		System.out.println("lbi3 size  : "+ lbi3.getWidth() +" / "+ lbi3.getHeight()  +" / "+ lbi3);

    }


	public void paintComponent(Graphics g)	{
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		

		g2.drawImage(bi,0,0,null);	
		g2.setPaint(Color.blue);	
		g2.draw(new Line2D.Double(0,205,500,205));
		g2.draw(new Line2D.Double(205,0,205,500));
		g2.drawImage(lbi3,0,310,null);		// 100
		g2.drawImage(lbi2,210,170,null);	// 150
		g2.drawImage(lbi,210,310,null);	// 100

	}

private	Image img;
private	BufferedImage bi,lbi,lbi2,lbi3;
private Graphics2D biContext;
}

