이미지 처리에서 미러 이미지(mirror image)란 원본 이미지를 좌우로 뒤집은 결과물을 의미합니다. Java에서는 픽셀 단위로 이미지를 조작하여 손쉽게 미러 효과를 구현할 수 있습니다. 이 글에서는 BufferedImage와 ImageIO 클래스를 활용해 미러 이미지를 만드는 과정을 단계별로 살펴보겠습니다.
미러 이미지 생성 절차
ImageIO.read()메서드를 사용하여 원본 이미지를 읽어옵니다.이미지의 높이(height)와 너비(width)를 구합니다.
결과를 저장할 빈
BufferedImage객체를 생성합니다.중첩 for 루프를 사용하여 이미지의 모든 픽셀을 순회합니다.
이미지의 너비를 오른쪽에서 왼쪽으로 반복하며 픽셀 위치를 교체합니다.
getRGB()메서드로 원본 픽셀 값을 가져옵니다.setRGB()메서드를 사용해 새로운 너비 값에 해당하는 위치에 픽셀을 설정함으로써 결과 이미지 객체에 좌우 반전된 픽셀을 기록합니다.
예제 코드
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class MirrorImage {
public static void main(String args[]) throws IOException {
// 이미지 읽기
File file = new File("D:\\Images\\tree.jpg");
BufferedImage img = ImageIO.read(file);
// 읽어온 이미지의 높이와 너비 구하기
int height = img.getHeight();
int width = img.getWidth();
// 결과를 저장할 BufferedImage 생성
BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for (int j = 0; j < height; j++) {
for (int i = 0, w = width - 1; i < width; i++, w--) {
int p = img.getRGB(i, j);
// 미러 이미지 픽셀 값 설정 - 좌우 모두 적용
res.setRGB(w, j, p);
}
}
// 수정된 이미지 저장
file = new File("D:\\Images\\mirror_image.jpg");
ImageIO.write(res, "jpg", file);
System.out.println("Done...");
}
}입력 이미지

출력 이미지

핵심 포인트 정리
이 예제의 핵심은 내부 루프에서 두 개의 인덱스(i는 왼쪽→오른쪽, w는 오른쪽→왼쪽)를 동시에 이동시키면서 원본 픽셀을 반대편 위치에 복사하는 것입니다. 이렇게 하면 각 행(row)마다 좌우가 뒤집힌 미러 효과가 자연스럽게 완성됩니다. 처리가 끝난 후에는 ImageIO.write() 메서드로 결과 이미지를 JPG 파일로 저장하면 됩니다.