import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import javax.swing.*;

 

public class ImageCanvas extends Frame implements ActionListener {
   private Button openButton; // 버튼
   private Image image; // 이미지
   private TextField point;
   BufferedImage Bimg;
   Graphics gbuf;
  
   public ImageCanvas() {
      makeUI();
   }
   // UI 구성
   private void makeUI() {
      this.setTitle("Image Canvas");
      this.setLayout(new BorderLayout());
      this.setSize(800, 800);
      this.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent we) {
            System.exit(0);
         }
      });
     
           
      // 이미지 불러오기 버튼
     
      Panel pnl = new Panel();
    
      point = new TextField(10);
     
      pnl.setBackground(Color.gray);
     
     
      this.addMouseListener(new MouseAdapter()
      {
          public void mouseClicked(MouseEvent e){
              point.setText("X:"+e.getX() + "Y:" + e.getY()+",");
              int rgb = Bimg.getRGB(e.getX(), e.getY());
              point.setText(","+rgb);
          }
      });
     
     
    //프레임에 배치
      
      openButton = new Button("Load Image");
      pnl.add(openButton);
      add(point,"North");
          
      openButton.addActionListener(this);
      this.add(pnl, BorderLayout.SOUTH);
      this.setVisible(true);
     
   }
   // 버튼 눌렸을 때 처리
   public void actionPerformed(ActionEvent ae) {
      if (ae.getSource() == openButton) {
         // 파일 선택 다이얼로그 생성
         FileDialog fd = new FileDialog(this);
         fd.setTitle("Select Image");
         fd.setSize(300, 100);
         fd.setVisible(true);
         // 파일 선택 후 이미지 불러오기
         loadImage(fd.getDirectory() + fd.getFile());
      }
   }
 //이미지 불러오기
   private void loadImage(String filePath) {
       //파일 다이얼로그로부터 선택된 파일 경로로 이미지 파일 생성
       Image img = Toolkit.getDefaultToolkit().getImage(filePath);
       //null이 아니면 전역 변수에 할당
       if (img != null) {
           image = img;
          
           //이미지 새로 그리기
           repaint();
       }
   }
   //그리는 메소드
   public void paint(Graphics g) {
       //이미지가 null이 아니면 이미지 그리기
       if (image != null)
           //파라미터: 이미지, X좌표, Y좌표, 이미지 관찰자(생략 가능)
           //g.drawImage(image, 0, 50, this);
           //파라미터: 이미지, X좌표, Y좌표, 이미지 가로 크기, 이미지 세로 크기, 이미지 관찰자(생략 가능)
           //this는 Frame을 상속받은 ImageCanvas 객체 자체로서

           //Frame으로부터 상속받은 가로와 세로의 크기를 알 수 있는 메소드를 사용 가능합니다.

           g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
   }

   public static void main(String[] args) {
      new ImageCanvas();
     
   }



// 좌표구한곳의 rgb값을 구할라고하는데

gbuf = Bimg.getGraphics();   < 이슈발 이거만 추가하면 바로 에러뜨네;;

int rgb =Bimg.getRGB(e.getX() , e.getY() );