IndexColorModel — 인덱스 색 모델

IndexColorModel — 인덱스 색 모델 (java.awt.image)

기본 sRGB 색 공간의 고정 컬러맵에 대한 인덱스인 단일 샘플로 구성된 픽셀 값과 함께 동작하는 ColorModel 클래스예요.

출처: Java API Reference

본문

IndexColorModeljava.awt.image.ColorModel을 확장하고 Transparency를 구현해요. 컬러맵은 각 인덱스에 대응하는 빨강, 초록, 파랑 및 선택적 알파 컴포넌트를 지정해요. 모든 컴포넌트는 컬러맵에서 8비트 unsigned 정수 값으로 표현돼요. 일부 생성자는 BigInteger 객체의 비트를 통해 어떤 컬러맵 항목이 유효하고 어떤 것이 사용 불가능한 색을 나타내는지 지정해 컬러맵에 "구멍(hole)"을 지정할 수 있게 해요. 이 색 모델은 X11 PseudoColor 비주얼과 비슷해요.

일부 생성자는 컬러맵의 각 픽셀에 알파 컴포넌트를 지정하는 수단을 제공하고, 다른 생성자는 그런 수단이 없거나 컬러맵 데이터가 알파 값을 포함하는지 나타내는 플래그를 제공해요. 생성자에 알파가 제공되지 않으면 각 항목에 대해 불투명 알파(alpha=1.0)가 가정돼요. 선택적 투명 픽셀 값으로, 해당 픽셀 값에 대해 지정·가정된 알파 컴포넌트와 무관하게 완전히 투명하게 만들 픽셀을 나타낼 수 있어요. IndexColorModel 객체의 컬러맵 색 컴포넌트는 알파 컴포넌트와 절대 프리멀티플라이되지 않아요.

투명도는 컬러맵 색의 알파 컴포넌트를 조사해 가장 구체적인 값을 선택해 결정돼요. 컬러맵의 모든 유효한 색이 불투명하고 유효한 투명 픽셀이 없으면 OPAQUE, 모든 유효한 색이 완전히 불투명(alpha=1.0)하거나 완전히 투명(alpha=0.0)하면(보통 유효한 투명 픽셀이 지정될 때) BITMASK, 그 외에는 TRANSLUCENT예요.

IndexColorModelOPAQUEhasAlphafalse, getNumComponents는 3을 반환해요. 그 외의 투명도 값에서는 hasAlphatrue, getNumComponents가 4예요.

컬러맵 인덱싱에 사용되는 값은 픽셀 표현의 최하위 n 비트에서 가져오는데, n은 생성자에 지정된 픽셀 크기에 기반해요. 8비트보다 작은 픽셀 크기에서는 n이 2의 거듭제곱으로 올림되고(3→4, 5·6·7→8), 8~16비트에서는 픽셀 크기와 같아요. 16비트보다 큰 픽셀 크기는 지원되지 않아요. 맵 크기보다 크거나 같지만 2ⁿ보다 작은 인덱스 값은 정의되지 않으며 모든 색·알파 컴포넌트에 0을 반환해요.

transferType 원시 배열 픽셀 표현을 쓰는 메서드의 배열 길이는 항상 1이에요. 지원 transfer type은 DataBuffer.TYPE_BYTETYPE_USHORT예요. 단일 int 표현은 항상 가능하므로 그 표현을 쓰는 메서드는 잘못된 픽셀 값 때문에 IllegalArgumentException을 던지지 않아요. 이 클래스의 많은 메서드는 final이에요(기본 네이티브 코드가 레이아웃을 가정하므로).

생성자

public IndexColorModel(int bits, int size, byte[] r, byte[] g, byte[] b)

빨강·초록·파랑 컴포넌트 배열로 구성해요. 모든 픽셀은 완전히 불투명(alpha 255)이고 transparency는 항상 OPAQUE예요.

예외: IllegalArgumentExceptionbits가 1보다 작거나 16보다 클 때, size가 1보다 작을 때

public IndexColorModel(int bits, int size, byte[] r, byte[] g, byte[] b, int trans)

빨강·초록·파랑 배열과 함께 투명 픽셀 인덱스 trans로 구성해요. trans가 가리키는 픽셀은 투명해져요.

예외: 위와 동일

public IndexColorModel(int bits, int size, byte[] r, byte[] g, byte[] b, byte[] a)

빨강·초록·파랑·알파 컴포넌트 배열로 구성해요.

예외: 위와 동일

public IndexColorModel(int bits, int size, byte[] cmap, int start, boolean hasalpha)

인터리브된 빨강·초록·파랑 및 선택적 알파 컴포넌트의 단일 배열(cmap, start부터 시작)로 구성해요. hasalpha는 배열에 알파가 포함됐는지 나타내요.

예외: 위와 동일

public IndexColorModel(int bits, int size, byte[] cmap, int start, boolean hasalpha, int trans)

위와 같지만 완전히 투명한 픽셀의 인덱스 trans를 지정해요. trans 픽셀은 지정된 알파 값과 무관하게 완전히 투명해져요.

예외: 위와 동일

public IndexColorModel(int bits, int size, int[] cmap, int start, boolean hasalpha, int trans, int transferType)

기본 RGB 포맷의 int 배열(cmap)로 구성해요. transferTypeTYPE_BYTETYPE_USHORT여야 해요.

예외: IllegalArgumentExceptionbits가 1보다 작거나 16보다 클 때, size가 1보다 작을 때, transferTypeTYPE_BYTE/TYPE_USHORT가 아닐 때

public IndexColorModel(int bits, int size, int[] cmap, int start, int transferType, BigInteger validBits)

int 배열과 함께 validBits로 유효/무효 픽셀을 지정해요. BigInteger에서 해당 인덱스의 비트가 설정되면 유효, 아니면 무효예요. null이면 모든 픽셀이 유효해요. (1.3부터)

예외: 위와 동일

메서드 상세

getTransparency() / getComponentSize() / getMapSize() / getTransparentPixel()

public int getTransparency()
public int[] getComponentSize()
public final int getMapSize()
public final int getTransparentPixel()

각각 투명도(OPAQUE/BITMASK/TRANSLUCENT), 컴포넌트당 비트 수 배열, 컬러맵 크기, 투명 픽셀의 인덱스(없으면 -1)를 반환해요.

getReds(byte[] r) / getGreens(byte[] g) / getBlues(byte[] b) / getAlphas(byte[] a) / getRGBs(int[] rgb)

public final void getReds(byte[] r)
public final void getGreens(byte[] g)
public final void getBlues(byte[] b)
public final void getAlphas(byte[] a)
public final void getRGBs(int[] rgb)

빨강/초록/파랑/알파 컴포넌트 배열을 지정된 배열에 복사해요(getMapSize까지의 초기 항목만). getRGBs는 각 인덱스의 데이터를 기본 RGB 모델 형식의 32비트 ARGB int로 변환해 복사해요.

getRed(int pixel) / getGreen / getBlue / getAlpha / getRGB(int)

public final int getRed(int pixel)
public final int getGreen(int pixel)
public final int getBlue(int pixel)
public final int getAlpha(int pixel)
public final int getRGB(int pixel)

지정된 픽셀의 색/알파 컴포넌트를 반환해요. 픽셀 값의 하위 n 비트만 사용해 계산하고, 반환값은 프리멀티플라이되지 않아요.

getDataElements(int rgb, Object pixel) / getComponents(...) / getDataElement(...) / getDataElements(int[] components, int offset, Object pixel)

픽셀을 RGB int로 변환하거나 컴포넌트 배열로 변환하는 일반 메서드들이에요. pixelnull이 아니면 transferType 원시 배열이어야 해요.

예외: ClassCastException — 타입 불일치 / ArrayIndexOutOfBoundsException — 부족할 때 / UnsupportedOperationException — transferType이 지원되지 않을 때

createCompatibleWritableRaster(int w, int h) / isCompatibleRaster(Raster) / createCompatibleSampleModel(int w, int h) / isCompatibleSampleModel(SampleModel)

public WritableRaster createCompatibleWritableRaster(int w, int h)
public boolean isCompatibleRaster(Raster raster)
public SampleModel createCompatibleSampleModel(int w, int h)
public boolean isCompatibleSampleModel(SampleModel sm)

호환성 검사와 호환되는 새 객체 생성 메서드들이에요. createCompatibleWritableRaster는 픽셀당 16비트 이하에서만 작동해요(초과 시 UnsupportedOperationException). isCompatibleSampleModelsmnull이면 false를 반환해요.

convertToIntDiscrete(Raster raster, boolean forceARGB)

public BufferedImage convertToIntDiscrete(Raster raster, boolean forceARGB)

소스 Raster의 인덱스를 이 ColorModel의 색/알파 컴포넌트 배열로 확장해 계산한 픽셀 데이터를 가진 TYPE_INT_ARGB 또는 TYPE_INT_RGB BufferedImage를 반환해요. forceARGBtrue면 알파 배열·투명 픽셀 유무와 무관하게 TYPE_INT_ARGB를 반환해요.

예외: IllegalArgumentExceptionraster가 이 IndexColorModel과 호환되지 않을 때

isValid(int pixel) / isValid() / getValidPixels() (1.3부터)

public boolean isValid(int pixel)
public boolean isValid()
public BigInteger getValidPixels()

특정 픽셀·모든 픽셀의 유효성을 검사하고, 컬러맵의 유효/무효 픽셀을 나타내는 BigInteger를 반환해요.

toString() / equals(Object) / hashCode()

public String toString()
public boolean equals(Object obj)
public int hashCode()

문자열 표현, 동등성 검사(지정된 객체가 IndexColorModel 인스턴스이고 이 객체와 같은지), 해시 코드를 제공해요.

더 알아보기