PixelGrabber — 픽셀 파밍 클래스

PixelGrabber — 픽셀 파밍 클래스 (java.awt.image)

Image 또는 ImageProducer 객체에 연결해 그 이미지의 픽셀 부분집합을 가져올 수 있는 ImageConsumer를 구현하는 클래스예요.

출처: Java API Reference

본문

PixelGrabberjava.lang.Object를 확장하고 ImageConsumer 인터페이스를 구현해요. 예를 들어 인덱스 컬러 모델을 RGB로 변환해서 이미지의 픽셀을 추출할 수 있어요.

int w = img.getWidth(null), h = img.getHeight(null);
int[] pix = new int[w * h];
PixelGrabber pg = new PixelGrabber(img, 0, 0, w, h, pix, 0, w);
pg.grabPixels();

생성자

public PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int off, int scansize)
public PixelGrabber(ImageProducer ip, int x, int y, int w, int h, int[] pix, int off, int scansize)

지정된 이미지(또는 ImageProducer가 생성한 이미지)의 (x, y, w, h) 사각형 픽셀 섹션을 주어진 배열에 가져오는 PixelGrabber를 만들어요. 픽셀은 기본 RGB ColorModel로 배열에 저장돼요. 사각형 (x, y, w, h) 안의 픽셀 (i, j)의 RGB 데이터는 pix[(j - y) * scansize + (i - x) + off]에 저장돼요. 좌표는 이미지의 기본(스케일되지 않은) 크기에 상대적이에요.

public PixelGrabber(Image img, int x, int y, int w, int h, boolean forceRGB)

지정된 이미지의 (x, y, w, h) 픽셀 섹션을 가져오는 PixelGrabber를 만들어요. 모든 setPixels 호출에 같은 ColorModel이 사용되면 원래 ColorModel로, 그렇지 않으면 기본 RGB ColorModel로 픽셀이 누적돼요. forceRGBtrue면 어쨌든 기본 RGB로 누적돼요. w < 0이나 h < 0이면 그 정보가 전달될 때 소스 데이터의 남은 너비·높이로 기본 설정돼요.

메서드 상세

startGrabbing() / abortGrabbing()

public void startGrabbing()
public void abortGrabbing()

startGrabbing은 픽셀 가져오기를 시작하도록 요청하고, abortGrabbing은 이미지 가져오기를 중단하도록 요청해요.

grabPixels()

public boolean grabPixels() throws InterruptedException

ImageImageProducer가 픽셀 전달을 시작하도록 요청하고 관심 사각형의 모든 픽셀이 전달될 때까지 기다려요.

반환값: 픽셀이 성공적으로 가져와지면 true, 중단·오류·타임아웃 시 false

예외: InterruptedException — 다른 스레드가 이 스레드를 인터럽트했을 때

grabPixels(long ms)

public boolean grabPixels(long ms) throws InterruptedException

모든 픽셀이 전달되거나 지정된 타임아웃이 경과할 때까지 기다려요. ms == 0이면 모든 픽셀이 전달될 때까지, ms > 0이면 전달 완료 또는 타임아웃까지, ms < 0이면 기다리지 않고 모든 픽셀이 가져와졌으면 true, 아니면 false를 반환해요.

getStatus() / status()

public int getStatus()
public int status()

픽셀의 상태를 반환해요. 사용 가능한 픽셀 정보를 나타내는 ImageObserver 플래그의 비트별 OR이 반환돼요. getStatus가 더 선호되는 메서드예요.

getWidth() / getHeight()

public int getWidth()
public int getHeight()

이미지 크기로 조정한 후의 픽셀 버퍼 너비·높이를 반환해요. 가져올 사각형에 너비가 지정되지 않았다면 이미지가 크기를 전달한 후에만 알 수 있어요(아직 모르면 -1).

getPixels()

public Object getPixels()

픽셀 버퍼를 반환해요. 명시적 버퍼로 구성되지 않았다면 이미지 데이터의 크기·형식을 알기 전까지 null을 반환해요. 소스가 둘 이상의 ColorModel을 쓰면 배열 객체가 이미지 가져오기 완료 때까지 시간에 따라 바뀔 수 있어요. byte 또는 int 배열을 반환해요.

getColorModel()

public ColorModel getColorModel()

배열에 저장된 픽셀의 ColorModel을 반환해요. 명시적 버퍼로 구성됐다면 항상 기본 RGB ColorModel을 반환해요. 그렇지 않으면 ImageProducer가 쓰는 ColorModel을 알기 전까지 null을 반환할 수 있어요.

setDimensions / setHints / setProperties / setColorModel / setPixels / imageComplete

이 메서드들은 픽셀을 가져오기 위해 ImageConsumer API의 일부로 이 클래스가 구현하는 메서드들이에요. 픽셀이 가져와지는 이미지의 ImageProducer가 호출하도록 의도됐으므로 직접 호출을 피하는 게 좋아요. setPixelssrcX/srcY/srcW/srcH(픽셀 영역), model(ColorModel), pixels(byte/int 배열), srcOff(오프셋), srcScan(행 간 거리)을 받아요.

더 알아보기