BandedSampleModel — 밴드 인터리브 샘플 모델
BandedSampleModel — 밴드 인터리브 샘플 모델 (java.awt.image)
밴드 인터리브(band interleaved) 방식으로 저장되고, 픽셀의 각 샘플이 DataBuffer의 한 데이터 요소를 차지하는 이미지 데이터를 나타내는 클래스예요.
본문
BandedSampleModel은 java.awt.image.ComponentSampleModel을 확장하는 final 클래스예요. 지각적으로 ComponentSampleModel을 서브클래스로 삼지만, 밴드 인터리브 이미지 데이터에 접근할 때 ComponentSampleModel이 제공하는 것보다 더 효율적인 구현을 제공해요. 각 밴드의 샘플 데이터를 DataBuffer의 서로 다른 뱅크(bank)에 저장하는 이미지를 다룰 때 주로 사용하면 좋아요.
픽셀 스트라이드(pixel stride)는 같은 스캔라인의 같은 밴드에 대한 두 샘플 사이의 데이터 배열 요소 수예요. BandedSampleModel의 픽셀 스트라이드는 1이에요. 스캔라인 스트라이드는 주어진 샘플과 다음 스캔라인의 같은 열에 있는 대응 샘플 사이의 데이터 배열 요소 수예요. 밴드 오프셋은 각 밴드를 담는 DataBuffer 뱅크의 첫 데이터 배열 요소부터 그 밴드의 첫 샘플까지의 데이터 배열 요소 수예요. 밴드는 0부터 N-1까지 번호가 매겨져요. 뱅크 인덱스는 데이터 버퍼의 뱅크와 이미지 데이터 밴드 사이의 대응 관계를 나타내요.
이 클래스는 TYPE_BYTE, TYPE_USHORT, TYPE_SHORT, TYPE_INT, TYPE_FLOAT, TYPE_DOUBLE 데이터 타입을 지원해요.
생성자
public BandedSampleModel(int dataType, int w, int h, int numBands)
지정된 파라미터로 BandedSampleModel을 구성해요. 픽셀 스트라이드는 1개 데이터 요소, 스캔라인 스트라이드는 너비와 같아요. 각 밴드는 별도 뱅크에 저장되고 모든 밴드 오프셋은 0이에요.
예외: IllegalArgumentException — w와 h가 둘 다 0보다 크지 않을 때, w와 h의 곱이 Integer.MAX_VALUE보다 클 때, numBands가 0보다 크지 않을 때, dataType이 지원 타입이 아닐 때
public BandedSampleModel(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets)
지정된 파라미터로 BandedSampleModel을 구성해요. 밴드 수는 길이가 같아야 하는 bandOffsets와 bankIndices 배열의 길이에서 추론돼요. 픽셀 스트라이드는 1개 데이터 요소예요.
예외: IllegalArgumentException / NullPointerException — bankIndices나 bandOffsets가 null일 때, bandOffsets.length가 0일 때, 두 배열 길이가 다를 때, 뱅크 인덱스가 0보다 작을 때, dataType이 지원되지 않을 때
메서드 상세
createCompatibleSampleModel(int w, int h)
public SampleModel createCompatibleSampleModel(int w, int h)
지정된 너비와 높이로 새 BandedSampleModel을 만들어요. 새 모델은 이 모델과 같은 밴드 수, 저장 데이터 타입, 뱅크 인덱스를 가져요. 밴드 오프셋은 밴드 사이 오프셋이 w*pixelStride이고 모든 밴드 오프셋의 최솟값이 0이 되도록 압축돼요.
예외: IllegalArgumentException — w나 h가 Integer.MAX_VALUE 또는 Integer.MIN_VALUE일 때, dataType이 지원되지 않을 때
createSubsetSampleModel(int[] bands)
public SampleModel createSubsetSampleModel(int[] bands)
이 BandedSampleModel의 밴드 부분집합으로 새 BandedSampleModel을 만들어요. 새 모델은 기존 모델과 함께 쓸 수 있는 DataBuffer와 함께 쓸 수 있어요.
예외: RasterFormatException — 밴드 수가 이 샘플 모델의 뱅크 수보다 클 때 / IllegalArgumentException — dataType이 지원되지 않을 때
createDataBuffer()
public DataBuffer createDataBuffer()
이 BandedSampleModel에 대응하는 DataBuffer를 만들어요. 데이터 타입, 뱅크 수, 크기가 이 모델과 일치해요.
예외: IllegalArgumentException — dataType이 지원되지 않을 때
getDataElements(int x, int y, Object obj, DataBuffer data)
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
TransferType 타입의 원시 배열로 단일 픽셀 데이터를 반환해요. BandedSampleModel의 경우 데이터 타입과 같고, 샘플은 배열 요소당 하나씩 반환돼요. 보통 obj는 null로 넘기면 자동으로 올바른 원시 타입의 객체가 생성돼요. obj가 null이 아니면 TransferType의 원시 배열이어야 하며, 아니면 ClassCastException이 던져져요. 좌표가 범위 밖이거나 obj가 픽셀 데이터를 담기에 충분하지 않으면 ArrayIndexOutOfBoundsException이 던져질 수 있어요.
getDataElements/setDataElements를 사용해 두 DataBuffer/SampleModel 쌍 사이를 전송하는 것은, SampleModel의 밴드 수가 같고 대응 밴드의 샘플당 비트 수가 같고 TransferType이 같을 때 유효해요.
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 배열로 반환해요. 좌표가 범위 밖이면 ArrayIndexOutOfBoundsException이 던져질 수 있어요.
getSample(int x, int y, int b, DataBuffer data)
public int getSample(int x, int y, int b, DataBuffer data)
(x, y)에 위치한 픽셀의 지정된 밴드 샘플을 int로 반환해요.
getSampleFloat / getSampleDouble
public float getSampleFloat(int x, int y, int b, DataBuffer data)
public double getSampleDouble(int x, int y, int b, DataBuffer data)
(x, y) 픽셀의 지정된 밴드 샘플을 각각 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의 단일 픽셀 데이터를 설정해요. obj는 TransferType의 원시 배열이어야 하며, 아니면 ClassCastException이 던져져요.
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 배열(데이터 배열 요소당 하나)에서 지정된 픽셀 사각형의 지정된 밴드 샘플을 설정해요.