MemoryImageSource — 메모리 이미지 소스

MemoryImageSource — 메모리 이미지 소스 (java.awt.image)

배열을 사용해 Image의 픽셀 값을 생성하는 ImageProducer 인터페이스의 구현 클래스예요.

출처: Java API Reference

본문

MemoryImageSourcejava.lang.Object를 확장하고 ImageProducer 인터페이스를 구현해요.

예를 들어 X축을 따라 검정에서 파랑으로, Y축을 따라 검정에서 빨강으로 페이드되는 100×100 이미지를 계산할 수 있어요.

int w = 100, h = 100;
int[] pix = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
    int red = (y * 255) / (h - 1);
    for (int x = 0; x < w; x++) {
        int blue = (x * 255) / (w - 1);
        pix[index++] = (255 << 24) | (red << 16) | blue;
    }
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));

MemoryImageSource는 시간에 따라 변하는 메모리 이미지도 관리할 수 있어 애니메이션이나 사용자 정의 렌더링을 허용해요.

생성자

MemoryImageSource는 크기(w 너비, h 높이), 픽셀 배열, 오프셋(off), 스캔라인 거리(scan), 선택적 ColorModelHashtable 프로퍼티로 구성돼요.

public MemoryImageSource(int w, int h, int[] pix, int off, int scan)
public MemoryImageSource(int w, int h, int[] pix, int off, int scan, Hashtable<?,?> props)
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?,?> props)
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan)
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?,?> props)

int 배열 버전은 픽셀을 기본 RGB(ColorModel.getRGBdefault())로 해석하고, ColorModel cm이 있는 버전은 지정된 색 모델로 byte/int 배열의 픽셀을 해석해요.

파라미터: w — 픽셀 사각형 너비 / h — 픽셀 사각형 높이 / cm — 지정된 ColorModel / pix — 픽셀 배열 / off — 첫 픽�을 저장할 배열 오프셋 / scan — 배열에서 한 픽셀 행에서 다음 행까지의 거리 / props — ImageProducer가 이미지를 처리하는 데 사용하는 프로퍼티 목록

메서드 상세

addConsumer(ImageConsumer ic) / isConsumer(ImageConsumer ic) / removeConsumer(ImageConsumer ic) / startProduction(ImageConsumer ic) / requestTopDownLeftRightResend(ImageConsumer ic)

ImageProducer 인터페이스의 표준 소비자 관리 메서드들이에요. addConsumer는 지정된 ImageConsumer를 이 이미지 데이터에 관심 있는 소비자 목록에 추가해요.

예외 (addConsumer): NullPointerException — 지정된 ImageConsumernull일 때

startProduction은 소비자를 목록에 추가하고 ImageConsumer 인터페이스를 통해 이미지 데이터 전달을 즉시 시작해요. requestTopDownLeftRightResend는 주어진 소비자가 top-down, left-right 순서로 이미지 데이터를 한 번 더 받도록 요청해요.

setAnimated(boolean animated)

public void setAnimated(boolean animated)

animated 파라미터에 따라 이 메모리 이미지를 다중 프레임 애니메이션 또는 단일 프레임 정적 이미지로 바꿔요. 이 메서드는 MemoryImageSource를 구성한 직후, 그걸로 이미지를 만들기 전에 호출해야 모든 ImageConsumer가 올바른 다중 프레임 데이터를 받을 수 있어요. 이 플래그가 설정되기 전에 소비자가 추가되면 그 소비자는 연결 당시 사용 가능했던 픽셀 데이터의 스냅샷만 보게 돼요.

setFullBufferUpdates(boolean fullbuffers)

public void setFullBufferUpdates(boolean fullbuffers)

이 애니메이션 메모리 이미지가 변경될 때마다 항상 완전한 픽셀 버퍼를 보내 업데이트할지 지정해요. 이 플래그는 setAnimated()으로 애니메이션 플래그를 켜지 않으면 무시돼요. 이 메서드도 구성 직후, 이미지를 만들기 전에 호출해야 해요.

newPixels()

public void newPixels()

현재 이 이미지 데이터에 관심 있는 모든 ImageConsumer에게 완전히 새로운 픽셀 버퍼를 보내고, 애니메이션 프레임이 완료됐음을 알려요. setAnimated()으로 애니메이션 플래그를 켠 경우에만 효과가 있어요.

newPixels(int x, int y, int w, int h) / newPixels(int x, int y, int w, int h, boolean framenotify)

public void newPixels(int x, int y, int w, int h)
public void newPixels(int x, int y, int w, int h, boolean framenotify)

픽셀 버퍼의 사각형 영역을 관심 있는 모든 ImageConsumer에게 보내요. framenotifytrue면 애니메이션 프레임 완료 통지(SINGLEFRAMEDONE)도 보내요. setFullBufferUpdates()로 전체 버퍼 업데이트 플래그가 켜져 있으면 사각형 파라미터는 무시되고 항상 전체 버퍼를 보내요. 애니메이션 플래그가 켜진 경우에만 효과가 있어요.

newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize) / newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)

public void newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize)
public void newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)

이 이미지의 픽셀을 담기 위한 새 byte/int 배열로 변경해요. setAnimated()으로 애니메이션 플래그가 켜져 있으면 새 픽셀이 관심 있는 모든 ImageConsumer에게 즉시 전달돼요.

더 알아보기