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() );
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.