ComponentSampleModel — 컴포넌트 샘플 모델

ComponentSampleModel — 컴포넌트 샘플 모델 (java.awt.image)

픽셀의 각 샘플이 DataBuffer의 한 데이터 요소를 차지하는 방식으로 저장되는 이미지 데이터를 나타내는 클래스예요.

출처: Java API Reference

본문

ComponentSampleModeljava.awt.image.SampleModel을 확장하고, 직접 알려진 서브클래스로 BandedSampleModel, PixelInterleavedSampleModel이 있어요.

이 클래스는 픽셀 샘플을 다루는 다음 개념을 정의해요:

  • 픽셀 스트라이드(pixel stride) — 같은 스캔라인의 같은 밴드에 대한 두 샘플 사이의 데이터 배열 요소 수.
  • 스캔라인 스트라이드(scanline stride) — 주어진 샘플과 다음 스캔라인의 같은 열에 있는 대응 샘플 사이의 데이터 배열 요소 수.
  • 밴드 오프셋(band offset) — 각 밴드를 담는 DataBuffer 뱅크의 첫 데이터 배열 요소부터 그 밴드의 첫 샘플까지의 데이터 배열 요소 수. 밴드는 0부터 N-1까지 번호가 매겨짐.
  • 뱅크 인덱스(bank indices) — 데이터 버퍼의 뱅크와 이미지 데이터 밴드 사이의 대응 관계.

이 클래스는 TYPE_BYTE, TYPE_USHORT, TYPE_SHORT, TYPE_INT, TYPE_FLOAT, TYPE_DOUBLE 데이터 타입을 지원해요.

생성자

public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)

지정된 파라미터로 ComponentSampleModel을 구성해요. 밴드 수는 bandOffsetsbankIndices 배열의 길이에서 추론돼요(길이는 같아야 함).

예외: IllegalArgumentExceptionwh가 둘 다 0보다 크지 않을 때, w·h의 곱이 Integer.MAX_VALUE보다 클 때, pixelStridescanlineStride가 0보다 작을 때 / NullPointerExceptionbankIndicesbandOffsetsnull일 때 / IllegalArgumentExceptionbandOffsets.length가 0이거나 두 배열 길이가 다르거나 뱅크 인덱스가 0보다 작거나 dataType이 지원되지 않을 때

메서드 상세

getOffset(int x, int y) / getOffset(int x, int y, int b)

public int getOffset(int x, int y)
public int getOffset(int x, int y, int b)

픽셀 (x, y)(와 밴드 b)의 데이터 요소 오프셋을 반환해요.

getSampleSize(int b) / getSampleSize()

public int getSampleSize(int b)
public int[] getSampleSize()

저장된 밴드 b(또는 모든 밴드)의 샘플 비트 수를 반환해요.

createCompatibleSampleModel(int w, int h)

public SampleModel createCompatibleSampleModel(int w, int h)

지정된 너비·높이로 새 ComponentSampleModel을 만들어요. 새 모델은 이 모델과 같은 뱅크 인덱스, 밴드 수, 저장 데이터 타입, 픽셀 스트라이드를 가져요. 밴드 오프셋은 w*pixelStride 사이로 압축되고 최솟값은 0이에요.

예외: IllegalArgumentExceptionw·hInteger.MAX_VALUE/MIN_VALUE이거나 dataType이 지원되지 않을 때

createSubsetSampleModel(int[] bands)

public SampleModel createSubsetSampleModel(int[] bands)

ComponentSampleModel의 밴드 부분집합으로 새 모델을 만들어요. 새 모델은 기존 모델과 함께 쓸 수 있는 DataBuffer와 함께 쓸 수 있어요.

예외: RasterFormatException — 밴드 수가 뱅크 수보다 클 때

createDataBuffer()

public DataBuffer createDataBuffer()

ComponentSampleModel에 대응하는 DataBuffer를 만들어요. 데이터 타입, 뱅크 수, 크기가 이 모델과 일치해요.

예외: IllegalArgumentException — dataType이 지원되지 않을 때

getBandOffsets() / getBankIndices() / getPixelStride() / getScanlineStride() / getNumDataElements()

public int[] getBandOffsets()
public int[] getBankIndices()
public int getPixelStride()
public int getScanlineStride()
public int getNumDataElements()

각각 밴드 오프셋, 뱅크 인덱스, 픽셀 스트라이드, 스캔라인 스트라이드, 데이터 요소 수를 반환해요.

getDataElements(int x, int y, Object obj, DataBuffer data)

public Object getDataElements(int x, int y, Object obj, DataBuffer data)

TransferType 원시 배열로 단일 픽셀 데이터를 반환해요. objnull이면 자동으로 올바른 원시 타입의 객체를 만들어요. objnull이 아니면 TransferType 원시 배열이어야 하며, 아니면 ClassCastException이 던져져요. 좌표가 범위 밖이거나 obj가 부족하면 ArrayIndexOutOfBoundsException이 던져질 수 있어요.

getPixel(int x, int y, int[] iArray, DataBuffer data) / getPixels(...)

public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)

지정된 픽셀(또는 픽셀 사각형)의 모든 샘플을 int 배열로 반환해요.

getSample(int x, int y, int b, DataBuffer data) / getSampleFloat / getSampleDouble

public int getSample(int x, int y, int b, DataBuffer data)
public float getSampleFloat(int x, int y, int b, DataBuffer data)
public double getSampleDouble(int x, int y, int b, DataBuffer data)

(x, y) 픽셀의 지정된 밴드 샘플을 각각 int, float, double로 반환해요.

getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)

public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)

지정된 픽셀 사각형의 지정된 밴드 샘플을 int 배열로 반환해요.

setDataElements(int x, int y, Object obj, DataBuffer data)

public void setDataElements(int x, int y, Object obj, DataBuffer data)

TransferType 원시 배열에서 지정된 DataBuffer의 단일 픽셀 데이터를 설정해요.

setPixel / setPixels

public void setPixel(int x, int y, int[] iArray, DataBuffer data)
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)

int 배열의 샘플로 DataBuffer의 픽셀(또는 픽셀 사각형)을 설정해요.

setSample(int x, int y, int b, int/float/double s, DataBuffer data)

public void setSample(int x, int y, int b, int s, DataBuffer data)
public void setSample(int x, int y, int b, float s, DataBuffer data)
public void setSample(int x, int y, int b, double s, DataBuffer data)

(x, y) 픽셀의 지정된 밴드 샘플을 각각 int, float, double 입력으로 설정해요.

setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)

public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)

int 배열에서 지정된 픽셀 사각형의 지정된 밴드 샘플을 설정해요.

더 알아보기