728x90
이미지 그리기
- 이미지 드로잉을 하려면 이미지 파일을 메모리로 로딩해서 Image 객체를 얻어야합니다.
- Image 객체를 얻는 방법은 두가지가 있습니다.
- 첫번째는 Toolkit의 getImage() 메소드를 얻는 것 입니다.

- 두번째 방법은 ImageIcon 객체를 생성해서 getImage() 메소드로 얻는것입니다.

- URL을 생성하는 법은 다음과 같습니다.

- 두 가지 방법을 이용해서 Image 객체를 얻었다면 이미지를 Canvas에 드로잉 할 수 있는데, 다음과 같이 Graphics의 drawImage() 메소드를 이용합니다.
- img는 Image 객체이고, x와 y는 드로잉이 시작될 좌상단 좌표입니다.
drawImage(Image img, int x, int y, ImageObserver observer)
- Observer는 이미지 로딩과 드로잉을 동시에 할때 필요합니다.
- 이미지를 로딩하는 도중에 주기적으로 ImageObserver의 imageUpdate() 메소드가 호출되는데, 이 메소드는 Canvas의 repaint() 메소드를 호출해서 그떄까지 로딩된 이미지를 다시 그리도록 합니다.
- Canvas는 기본적으로 ImageObserver 인터페이스를 구현 하고 있기 때문에 this를 사용해서 observer의 매개값으로 줄수 있습니다.
다음은 ImageExample 클래스와 동일한 위치의 파일을 읽고, Canvas에 드로잉 하는 방법을 보여줍니다.
package java0220;
import java.awt.*;
import java.util.function.ToLongBiFunction;
import javax.swing.*;
public class ImageExample extends JFrame {
public ImageExample() {
this.setTitle("이미지 그리기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(new MyCanvas(), BorderLayout.CENTER);
this.setSize(500, 350);
}
// MyCanvas()
public class MyCanvas extends Canvas{
private Image imgSun, imgMoon;
public MyCanvas() {
// 배경을 흰색으로 변경
this.setBackground(Color.WHITE);
// 이미지를 로딩, Image 객체
Toolkit toolkit = Toolkit.getDefaultToolkit();
imgSun = toolkit.getImage(getClass().getResource("./sun.gif"));
imgMoon = new ImageIcon(getClass().getResource("moon.gif")).getImage();
}
public void paint(Graphics g) {
g.drawImage(imgSun, 10, 10, this);
g.drawImage(imgMoon, 300, 20, this);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ImageExample jFrame = new ImageExample();
jFrame.setVisible(true);
}
});
}
}

728x90
'JAVA > Swing' 카테고리의 다른 글
| 기본 도형 그리기.Swing (0) | 2023.02.20 |
|---|---|
| 배경 이미지 넣기.Swing (0) | 2023.02.20 |
| 안티 알리아싱(Anti-aliasing).Swing (0) | 2023.02.20 |
| Color와 Font.Swing (0) | 2023.02.20 |
| Canvas와 Graphics.Swing (0) | 2023.02.20 |