DirectColorModel — 직접 색 모델

DirectColorModel — 직접 색 모델 (java.awt.image)

RGB 색과 알파 정보를 별도의 샘플로 나타내고 단일 픽셀의 모든 샘플을 단일 int, short, byte 양으로 패킹하는 픽셀 값과 함께 동작하는 ColorModel 클래스예요.

출처: Java API Reference

본문

DirectColorModeljava.awt.image.PackedColorModel을 확장하고 Transparency를 구현해요.

이 클래스는 ColorSpace.TYPE_RGB 타입의 ColorSpace와만 함께 쓸 수 있어요. 또한 각 컴포넌트의 최소 정규화 값이 0.0, 최대 값이 1.0이어야 해요. 픽셀 값에는 세 개의 색 샘플이 있어야 하고 단일 알파 샘플이 있을 수 있어요. transferType 원시 배열 픽셀 표현을 쓰는 메서드의 경우 배열 길이는 항상 1이에요. 지원 transfer type은 DataBuffer.TYPE_BYTE, TYPE_USHORT, TYPE_INT예요.

색·알파 샘플은 비트 마스크가 나타내는 비트에 배열의 단일 요소에 저장돼요. 각 마스크는 연속적이어야 하고 마스크끼리 겹치면 안 돼요. 마스크와 샘플의 대응:

  • 마스크는 알파가 없으면 02, 있으면 03의 인덱스로 식별돼요.
  • 처음 세 인덱스는 색 샘플을 가리켜요: 인덱스 0=빨강, 1=초록, 2=파랑.
  • 인덱스 3(있으면)은 알파 샘플을 가리켜요.

DirectColorModel은 보통 마스크로 패킹된 샘플을 정의하는 이미지 데이터와 함께 쓰여요. 예를 들어 SinglePixelPackedSampleModel과 함께 BufferedImage를 구성할 수 있어요. 보통 SampleModelColorModel이 쓰는 마스크는 같지만, 다르면 픽셀 데이터의 색 해석은 ColorModel의 마스크대로 이루어져요.

이 클래스의 객체는 항상 픽셀 값을 단일 int로 표현할 수 있으므로 단일 int 픽셀 표현이 모든 객체에 유효해요. 이 색 모델은 X11 TrueColor 비주얼과 비슷해요. getRGBdefault가 지정하는 기본 RGB ColorModel은 0xAARRGGBB 형식의 DirectColorModel이에요.

이 클래스의 많은 메서드는 final이에요. 이는 기본 네이티브 그래픽 코드가 이 클래스의 레이아웃과 동작에 대해 가정을 하고, 그 가정이 final로 표시된 메서드 구현에 반영되기 때문이에요. 다른 이유로 서브클래스를 만들 수는 있지만 그 메서드들의 동작을 오버라이드하거나 바꿀 수는 없어요.

생성자

public DirectColorModel(int bits, int rmask, int gmask, int bmask)

붉은·초록·파랑 색 샘플을 포함하는 int 픽셀 표현의 비트를 나타내는 마스크들로 DirectColorModel을 구성해요. 픽셀 값에 알파 정보가 없으므로 모든 픽셀은 불투명(alpha=1.0)으로 취급돼요. 각 마스크의 모든 비트는 연속적이고 int 픽셀 표현의 지정된 하위 비트 수에 들어맞아야 해요. 색 공간은 기본 sRGB이고, transparency는 OPAQUE예요.

public DirectColorModel(int bits, int rmask, int gmask, int bmask, int amask)

색·알파 샘플을 포함하는 int 픽셀 표현의 비트를 나타내는 마스크들로 구성해요. amask가 0이면 알파 정보가 없고 모든 픽셀은 불투명으로 취급돼요. 알파가 있으면 프리멀티플라이되지 않아요. transparency는 알파가 없으면 OPAQUE, 있으면 TRANSLUCENT예요.

public DirectColorModel(ColorSpace space, int bits, int rmask, int gmask, int bmask,
                        int amask, boolean isAlphaPremultiplied, int transferType)

지정된 파라미터로 구성해요. spaceTYPE_RGB 타입이어야 하고 최소값 0.0, 최대값 1.0이어야 해요. transferTypeTYPE_BYTE, TYPE_USHORT, TYPE_INT 중 하나여야 해요.

예외: IllegalArgumentExceptionspaceTYPE_RGB가 아니거나 min/max 정규화 컴포넌트 값이 0.0/1.0이 아닐 때

메서드 상세

getRedMask() / getGreenMask() / getBlueMask() / getAlphaMask()

public final int getRedMask()
public final int getGreenMask()
public final int getBlueMask()
public final int getAlphaMask()

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)

지정된 픽셀의 색/알파 컴포넌트를 기본 sRGB에서 0~255로 스케일링해 반환해요. 반환값은 프리멀티플라이되지 않아요(알파가 프리멀티플라이면 나누고, 알파가 0이면 0). getRGB는 기본 RGB 색 모델 형식으로 반환해요.

getRed(Object inData) / getGreen / getBlue / getAlpha / getRGB(Object)

public int getRed(Object inData)
...
public int getRGB(Object inData)

transferType 원시 데이터 배열로 지정된 픽셀의 컴포넌트를 반환해요.

예외: ClassCastExceptioninData가 transferType 원시 배열이 아닐 때 / ArrayIndexOutOfBoundsException — 픽셀을 담기에 부족할 때 / UnsupportedOperationException — transferType이 지원되지 않을 때

getDataElements(int rgb, Object pixel)

public Object getDataElements(int rgb, Object pixel)

기본 RGB 색 모델의 정수 픽셀 표현에서 이 ColorModel의 픽셀 데이터 요소 배열을 반환해요. WritableRaster.setDataElements에 전달할 수 있어요.

getComponents(int/​Object pixel, int[] components, int offset)

public final int[] getComponents(int pixel, int[] components, int offset)
public final int[] getComponents(Object pixel, int[] components, int offset)

픽셀의 비정규화 색/알파 컴포넌트 배열을 반환해요. componentsnull이면 새 배열을 할당하고, offset부터 저장해요.

createCompatibleWritableRaster(int w, int h)

public final WritableRaster createCompatibleWritableRaster(int w, int h)

ColorModel과 호환되는 데이터 레이아웃(SampleModel)을 가진 지정된 너비·높이의 WritableRaster를 만들어요.

예외: IllegalArgumentExceptionwh가 0보다 작거나 같을 때

getDataElement(int[] components, int offset) / getDataElements(int[] components, int offset, Object obj)

public int getDataElement(int[] components, int offset)
public Object getDataElements(int[] components, int offset, Object obj)

비정규화 컴포넌트에서 int 픽셀 값(또는 데이터 요소 배열)을 반환해요.

coerceData(WritableRaster raster, boolean isAlphaPremultiplied)

public final ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied)

raster 데이터를 isAlphaPremultiplied 상태와 일치하도록 강제해요. 데이터를 강제로 바꿔야 하면 알맞은 플래그를 가진 이 ColorModel 인스턴스를 반환해요.

isCompatibleRaster(Raster) / toString()

public boolean isCompatibleRaster(Raster raster)
public String toString()

Raster가 이 ColorModel과 호환되는지 검사하고, 이 DirectColorModel을 나타내는 문자열을 반환해요.

더 알아보기