SampleModel — 샘플 모델 추상 클래스

SampleModel — 샘플 모델 추상 클래스 (java.awt.image)

이미지에서 픽셀 샘플을 추출하기 위한 인터페이스를 정의하는 추상 클래스예요.

출처: Java API Reference

본문

SampleModelObject를 확장하는 추상 클래스예요. 모든 이미지 데이터는 픽셀 모음으로 표현되고, 각 픽셀은 여러 샘플로 구성돼요. 샘플은 이미지 한 밴드의 데이터이고, 밴드는 이미지에서 특정 유형의 모든 샘플로 구성돼요. 예를 들어 픽셀은 빨강·초록·파랑 성분을 나타내는 세 샘플을 가질 수 있어요.

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을 구성해요.

예외: IllegalArgumentExceptionw·h가 0보다 크지 않을 때, w*hInteger.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 — 좌표·밴드 인덱스 범위 밖 또는 출력 배열이 너무 작을 때

더 알아보기