SampleModel — 샘플 모델 추상 클래스
SampleModel — 샘플 모델 추상 클래스 (java.awt.image)
이미지에서 픽셀 샘플을 추출하기 위한 인터페이스를 정의하는 추상 클래스예요.
본문
SampleModel은 Object를 확장하는 추상 클래스예요. 모든 이미지 데이터는 픽셀 모음으로 표현되고, 각 픽셀은 여러 샘플로 구성돼요. 샘플은 이미지 한 밴드의 데이터이고, 밴드는 이미지에서 특정 유형의 모든 샘플로 구성돼요. 예를 들어 픽셀은 빨강·초록·파랑 성분을 나타내는 세 샘플을 가질 수 있어요.
SampleModel의 하위 클래스는 표현할 수 있는 샘플 유형(예: unsigned 8-bit byte, signed 16-bit short)을 지정하고 메모리에서 샘플이 어떻게 구성되는지 지정할 수 있어요. Java 2D API에서 내장 이미지 처리 연산자는 모든 샘플 유형에 동작하지 않을 수 있지만, 일반적으로 16비트 이하의 unsigned 정수 샘플에는 동작해요.
픽셀 모음은 DataBuffer와 SampleModel로 구성된 Raster로 표현돼요. SampleModel은 DataBuffer의 샘플 접근을 허용하고, 프로그래머가 DataBuffer의 샘플·픽셀을 직접 조작하는 데 쓸 수 있는 저수준 정보를 제공할 수 있어요. 이 클래스는 일반적으로 이미지 처리를 위한 폴백 방법이에요. 더 효율적인 코드는 SampleModel을 적절한 하위 클래스로 캐스트합니다.
필드
| 필드 | 설명 |
|---|---|
width / height |
이 SampleModel이 설명하는 이미지 데이터 영역의 너비 / 높이(픽셀) |
numBands |
이 SampleModel이 설명하는 이미지 데이터의 밴드 수 |
dataType |
픽셀 데이터를 저장하는 DataBuffer의 데이터 타입 |
생성자
public SampleModel(int dataType, int w, int h, int numBands)
지정된 파라미터로 SampleModel을 구성해요.
예외: IllegalArgumentException — w·h가 0보다 크지 않을 때, w*h가 Integer.MAX_VALUE보다 클 때, dataType이 DataBuffer의 미리 정의된 타입이 아닐 때, numBands가 1보다 작을 때
메서드 (추상/구체)
getWidth()/getHeight()— 너비 / 높이(픽셀) 반환getNumBands()— 총 밴드 수 반환getNumDataElements()— abstract. getDataElements·setDataElements로 픽셀 전송에 필요한 데이터 요소 수 반환getDataType()— DataBuffer의 데이터 타입 반환getTransferType()— 픽셀 전송에 사용되는 TransferType 반환 (DataBuffer의 저장 타입과 같을 수도 있고 다를 수도 있음)getPixel(int x, int y, int[]/float[]/double[] array, DataBuffer data)— 지정된 픽셀 샘플을 배열로 반환. 예외:NullPointerException— data null,ArrayIndexOutOfBoundsException— 좌표·배열 크기getPixels(int x, int y, int w, int h, int[]/float[]/double[] array, DataBuffer data)— 픽셀 사각형의 모든 샘플 반환getDataElements(int x, int y, Object obj, DataBuffer data)— abstract. 단일 픽셀 데이터를 TransferType 기본 배열로 반환.obj는 null로 전달하면 자동으로 생성getDataElements(int x, int y, int w, int h, Object obj, DataBuffer data)— 픽셀 사각형 데이터 반환setDataElements(int x, int y, Object obj, DataBuffer data)— abstract. 단일 픽셀 데이터 설정setDataElements(int x, int y, int w, int h, Object obj, DataBuffer data)— 픽셀 사각형 데이터 설정getSample(int x, int y, int b, DataBuffer data)— abstract. (x,y) 픽셀의 지정된 밴드 샘플을 int로 반환getSampleFloat(...)/getSampleDouble(...)— 샘플을 float / double로 반환getSamples(...)— 사각형의 지정된 밴드 샘플을 배열로 반환setPixel(...)— int/float/double 배열로 픽셀 설정setPixels(...)— 사각형의 모든 샘플 설정setSample(int x, int y, int b, int s, DataBuffer data)— abstract. 밴드 샘플 설정. float/double 오버로드는 기본 구현이 int로 캐스트 후 호출setSamples(...)— 사각형의 지정된 밴드 샘플 설정createCompatibleSampleModel(int w, int h)— abstract. 이 SampleModel과 같은 형식이지만 다른 너비·높이를 가진 SampleModel 생성createSubsetSampleModel(int[] bands)— abstract. 밴드 부분집합을 가진 새 SampleModel 생성createDataBuffer()— abstract. 이 SampleModel에 대응하는 DataBuffer 생성 (너비·높이 일치)getSampleSize()/getSampleSize(int band)— abstract. 모든 밴드 / 지정된 밴드 샘플의 비트 크기 반환
예외 (데이터 접근 메서드): NullPointerException — data null, ArrayIndexOutOfBoundsException — 좌표·밴드 인덱스 범위 밖 또는 출력 배열이 너무 작을 때