Image — 그래픽 이미지 추상 클래스

Image — 그래픽 이미지 추상 클래스 (java.awt)

그래픽 이미지를 나타내는 모든 클래스의 슈퍼클래스인 추상 클래스예요. 이미지는 플랫폼 특정 방식으로 획득해야 해요. Java 1.0부터 도입됐어요.

출처: Java API Reference

본문

Imagejava.lang.Object를 확장하는 추상 클래스이며, 직접 알려진 서브클래스로 AbstractMultiResolutionImage, BufferedImage, VolatileImage가 있어요.

필드 요약

수식자·타입 필드 설명
protected float accelerationPriority 이 이미지를 가속하기 위한 우선순위예요.
static final int SCALE_AREA_AVERAGING Area Averaging 이미지 스케일링 알고리즘을 사용해요.
static final int SCALE_DEFAULT 기본 이미지 스케일링 알고리즘을 사용해요.
static final int SCALE_FAST 스케일링 속도를 이미지 부드러움보다 우선하는 알고리즘을 선택해요.
static final int SCALE_REPLICATE ReplicateScaleFilter 클래스에 구현된 스케일링 알고리즘을 사용해요.
static final int SCALE_SMOOTH 이미지 부드러움을 스케일링 속도보다 우선하는 알고리즘을 선택해요.
static final Object UndefinedProperty 특정 이미지에 정의되지 않은 프로퍼티를 가져올 때 반환해야 하는 객체예요.

필드 상세

  • accelerationPriority — 이 이미지를 가속하기 위한 우선순위예요. 서브클래스는 다른 기본 우선순위를 자유롭게 설정할 수 있고, 애플리케이션은 setAccelerationPriority(float)로 특정 이미지의 우선순위를 설정할 수 있어요. (1.5부터)
  • UndefinedProperty — 특정 이미지에 정의되지 않은 프로퍼티를 가져올 때마다 반환해야 해요.
  • SCALE_DEFAULT — 기본 이미지 스케일링 알고리즘을 사용해요. (1.1부터)
  • SCALE_FAST — 스케일링 속도를 부드러움보다 우선해요. (1.1부터)
  • SCALE_SMOOTH — 부드러움을 스케일링 속도보다 우선해요. (1.1부터)
  • SCALE_REPLICATEReplicateScaleFilter에 구현된 알고리즘을 사용해요. 같은 알고리즘을 수행하면서도 툴킷이 제공하는 이미징 인프라에 더 효율적으로 통합되는 다른 필터로 대체할 수도 있어요. (1.1부터)
  • SCALE_AREA_AVERAGING — Area Averaging 알고리즘을 사용해요. 같은 알고리즘을 수행하되 툴킷의 이미지 인프라에 더 효율적으로 통합되는 다른 필터로 대체할 수도 있어요. (1.1부터)

생성자

protected Image()

서브클래스가 호출하기 위한 생성자예요.

메서드 상세

getWidth(ImageObserver observer)

public abstract int getWidth(ImageObserver observer)

이미지의 너비를 알아내요. 아직 알려지지 않았다면 -1을 반환하고, 지정된 ImageObserver 객체가 나중에 통지받아요.

파라미터: observer — 이미지가 로드되기를 기다리는 객체

반환값: 이 이미지의 너비, 또는 아직 모르면 -1

getHeight(ImageObserver observer)

public abstract int getHeight(ImageObserver observer)

이미지의 높이를 알아내요. 아직 알려지지 않았다면 -1을 반환하고, 지정된 ImageObserver가 나중에 통지받아요.

반환값: 이 이미지의 높이, 또는 아직 모르면 -1

getSource()

public abstract ImageProducer getSource()

이미지의 픽셀을 생성하는 객체를 가져와요. 이미지 필터링 클래스와 이미지 변환·스케일링을 수행하는 메서드가 이 메서드를 호출해요.

반환값: 이 이미지의 픽셀을 생성하는 이미지 프로듀서

getGraphics()

public abstract Graphics getGraphics()

오프스크린 이미지에 그리기 위한 그래픽 컨텍스트를 만들어요. 오프스크린 이미지에서만 호출할 수 있어요.

반환값: 오프스크린 이미지에 그릴 그래픽 컨텍스트

예외: UnsupportedOperationException — 오프스크린이 아닌 이미지에서 호출될 때

getProperty(String name, ImageObserver observer)

public abstract Object getProperty(String name,
                                   ImageObserver observer)

이름으로 이 이미지의 프로퍼티를 가져와요. 개별 프로퍼티 이름은 각 이미지 포맷이 정의해요. 특정 이미지에 프로퍼티가 정의되지 않았다면 UndefinedProperty 객체를 반환해요. 프로퍼티가 아직 알려지지 않았다면 null을 반환하고 ImageObserver가 나중에 통지받아요. 프로퍼티 이름 "comment"는 이미지·출처·작성자를 설명하는 선택적 주석을 저장하는 데 사용해야 해요.

예외: NullPointerException — 프로퍼티 이름이 null일 때

getScaledInstance(int width, int height, int hints)

public Image getScaledInstance(int width,
                               int height,
                               int hints)

이 이미지의 스케일된 버전을 만들어요. 기본적으로 지정된 너비·높이로 렌더링하는 새 Image 객체를 반환해요. 원본 소스 이미지가 완전히 로드됐더라도 새 객체는 비동기적으로 로드될 수 있어요. widthheight가 음수면 원본 비율을 유지하도록 값을 대체하고, 둘 다 음수면 원본 크기를 사용해요.

파라미터: width — 스케일할 너비 / height — 스케일할 높이 / hints — 리샘플링 알고리즘을 나타내는 플래그

예외: IllegalArgumentExceptionwidthheight가 0일 때 (1.1부터)

flush()

public void flush()

Image 객체가 사용하는 재구성 가능한 모든 리소스를 비워요. 화면 렌더링을 위해 캐시된 픽셀 데이터와, 재생성할 수 있다면 데이터나 픽셀을 저장하는 시스템 리소스를 모두 포함해요. 이미지를 처음 만들었을 때와 비슷한 상태로 재설정돼, 다시 렌더링하면 이미지 데이터를 재생성하거나 소스에서 다시 가져와야 해요.

타입별 동작: BufferedImage는 픽셀을 저장하는 기본 Raster는 그대로 두지만 가속 blit용으로 디스플레이 하드웨어에 업로드한 복사본처럼 캐시된 정보는 비워요. Component 메서드로 만들어진 이미지도 기본 픽셀 버퍼는 남기고 캐시 정보만 해제해요. VolatileImage는 디스플레이 하드웨어에 흔히 저장되는 기본 복사본을 포함해 모든 픽셀 리소스를 해제하고, 나중에 validate 메서드로 복원할 수 있어요. 파일·URL에서 로드되거나 ImageProducer로 만들어진 이미지는 언로드되고 모든 로컬 리소스가 해제되며, 렌더링할 때 처음처럼 다시 로드될 수 있어요.

getCapabilities(GraphicsConfiguration gc)

public ImageCapabilities getCapabilities(GraphicsConfiguration gc)

지정된 GraphicsConfiguration에서 이 Image의 성능(capability)을 조회할 수 있는 ImageCapabilities 객체를 반환해요. 예를 들어 사용자가 BufferedImage를 만들었어도 주어진 GraphicsConfiguration에 그 크기의 이미지를 만들 비디오 메모리가 없을 수 있으므로, 그 객체가 일반적으로는 가속 가능해도 이 구성에서는 그런 능력이 없는 걸 알 수 있어요. (1.5부터)

파라미터: gcGraphicsConfiguration 객체. null이면 기본 GraphicsConfiguration의 성능을 조회해요.

setAccelerationPriority(float priority)

public void setAccelerationPriority(float priority)

이 이미지에 가속이 얼마나 중요한지에 대한 힌트를 설정해요. 비디오 메모리 같은 부족한 가속 리소스를 어떻게 쓸지 다른 Image 객체의 우선순위와 비교할 때 사용돼요. 리소스가 부족하지만 더 낮은 우선순위의 다른 이미지를 비가속화해 확보할 수 있다면, 그 이미지는 이 이미지를 위해 비가속화될 수 있어요. 같은 우선순위의 이미지는 선착순으로 리소스를 차지해요.

파라미터: priority — 0과 1 사이(포함)의 값. 높을수록 가속이 더 중요함을 나타내며, 0은 절대 가속하지 말라는 뜻이에요.

예외: IllegalArgumentExceptionpriority가 0보다 작거나 1보다 클 때 (1.5부터)

getAccelerationPriority()

public float getAccelerationPriority()

현재 가속 우선순위 힌트 값을 반환해요.

반환값: 현재 우선순위 값을 나타내는 0과 1 사이(포함)의 값

더 알아보기