JAVA/Swing

이미지 그리기.Swing

john_ 2023. 2. 20. 18:43
728x90

이미지 그리기

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

 

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

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

 

  • 두 가지 방법을 이용해서 Image 객체를 얻었다면 이미지를 Canvas에 드로잉 할 수 있는데, 다음과 같이 GraphicsdrawImage() 메소드를 이용합니다.
  • imgImage 객체이고, xy는 드로잉이 시작될 좌상단 좌표입니다.
drawImage(Image img, int x, int y, ImageObserver observer)

 

  • Observer는 이미지 로딩과 드로잉을 동시에 할때 필요합니다.
  • 이미지를 로딩하는 도중에 주기적으로 ImageObserverimageUpdate() 메소드가 호출되는데, 이 메소드는 Canvasrepaint() 메소드를 호출해서 그떄까지 로딩된 이미지를 다시 그리도록 합니다.
  • 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