Swing/ImageIO.read()

Image Drawing with ImageIO

Soul-Learner 2014. 12. 21. 15:09

Swing 에서 ImageIO 를 이용하여 JPanel 에 이미지를 그리는 다양한 예



ImageIO.read()를 이용하여 다양한 환경에서 이미지 데이터를 BufferedImage로 전환하여 화면에 출력하는 예이다.

프로젝트에 포함된 이미지 파일을 로드하고 화면에 그리는 경우

로컬 시스템에 존재하는 이미지 파일을 로드하여 화면에 출력하는 경우

메모리에 바이트 배열 상태로 존재하는 이미지파일 데이터를 화면에 출력하는 경우

URL 클래스를 사용하여 이미지 파일을 로드하는 예



현재 프로젝트에 포함된 이미지를 화면에 출력하는 예

package swing.test;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.*;

public class MainFrame extends JFrame{

	MyPanel panel;
	
	public static void main(String[] args) {

		MainFrame mf = new MainFrame("Swing Test");

	}
	
	MainFrame(String title) {
		super(title);
		
		this.setLayout(null);
		this.setBounds(100, 100, 800, 600); // 윈도우의 위치와 크기 지정
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		panel = new MyPanel();
		this.getContentPane().add(panel);

		this.setVisible(true);
	}

}

class MyPanel extends JPanel {

	BufferedImage img;
	
	MyPanel() {
		this.setBackground(Color.ORANGE);
		this.setBounds(100, 100, 500, 400);
		// 프로젝트 내의 현재 패키지 안의 images/smile.jpg 를 로드함
		InputStream is = getClass().getResourceAsStream("images/smile.jpg");
		try {
			img = ImageIO.read(is);
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g); // 기존에 그려진 화면을 지정된 배경색으로 지우는 역할을 한다
		Graphics2D g2d = (Graphics2D) g;
		
		g2d.drawImage(img, 0, 0, null);
	}

}



로컬 시스템의 이미지 파일을 로드하여 BufferedImage 를 생성하는 예

File imgFile = new File("D:/test/sample1.jpg");
BufferedImage img = ImageIO.read(imgFile);



이미지 파일을 로드한 byte[]을 이용하여 이미지를 출력하는 예

Socket 으로 연결된 다른 원격 시스템으로부터 전달된 이미지 데이터를 화면에 출력할 때 활용할 수 있다

class MyPanel extends JPanel {

	BufferedImage img;
	byte[] imgBuf;
	
	MyPanel() {
		this.setBackground(Color.ORANGE);
		this.setBounds(100, 100, 500, 400);
		// byte[]에 저장된 이미지 파일 데이터를 BufferedImage로 변환하여 화면에 출력한다
		File imgFile = new File("D:/test/sample1.jpg");
		imgBuf = new byte[(int)imgFile.length()];
		try {
			FileInputStream fin = new FileInputStream(imgFile);
			fin.read(imgBuf);
			ByteArrayInputStream bain = new ByteArrayInputStream(imgBuf);
			img = ImageIO.read(bain);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g); // 기존에 그려진 화면을 지정된 배경색으로 지우는 역할을 한다
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(img, 0, 0, null);
	}
}



URL을 이용하여 이미지를 로드하고 출력하는 예

웹서버에 존재하는 이미지 파일을 화면에 출력할 때 활용할 수 있다

class MyPanel extends JPanel {

	BufferedImage img;
	byte[] imgBuf;
	
	MyPanel() {
		this.setBackground(Color.ORANGE);
		this.setBounds(100, 100, 500, 400);
		// URL 클래스를 이용하여 이미지 파일을 로드하여 BufferedImage로 전환하는 예
		URL imgURL = getClass().getResource("images/smile.jpg");
		try {
			img = ImageIO.read(imgURL);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g); // 기존에 그려진 화면을 지정된 배경색으로 지우는 역할을 한다
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(img, 0, 0, null);
	}
}