AffineTransformOp — 아핀 변환 연산
AffineTransformOp — 아핀 변환 연산 (java.awt.image)
아핀 변환(affine transform)을 사용해 소스 이미지나 Raster의 2D 좌표를 목적지 이미지나 Raster의 2D 좌표로 선형 매핑하는 클래스예요. 사용할 보간(interpolation) 타입은 생성자에서 RenderingHints 객체나 이 클래스에 정의된 정수 보간 타입 중 하나로 지정해요.
본문
AffineTransformOp는 java.lang.Object를 확장하고 BufferedImageOp, RasterOp 인터페이스를 구현해요.
생성자에 RenderingHints 객체를 지정하면, 보간 힌트와 렌더링 품질 힌트가 이 연산의 보간 타입을 정하는 데 사용돼요. 색 변환이 필요하면 컬러 렌더링 힌트와 디더링(dithering) 힌트를 사용할 수 있어요.
다음 제약을 반드시 지켜야 해요:
- 소스와 목적지는 달라야 해요.
Raster객체의 경우 소스의 밴드 수가 목적지의 밴드 수와 같아야 해요.
관련 힌트로 RenderingHints.KEY_INTERPOLATION, RenderingHints.KEY_RENDERING, RenderingHints.KEY_COLOR_RENDERING, RenderingHints.KEY_DITHERING을 참고해요.
필드 요약
| 수식자·타입 | 필드 | 설명 |
|---|---|---|
static final int |
TYPE_BICUBIC |
바이큐빅(bicubic) 보간 타입이에요. |
static final int |
TYPE_BILINEAR |
바이리니어(bilinear) 보간 타입이에요. |
static final int |
TYPE_NEAREST_NEIGHBOR |
최근접 이웃(nearest-neighbor) 보간 타입이에요. |
생성자
public AffineTransformOp(AffineTransform xform, RenderingHints hints)
아핀 변환을 받아 AffineTransformOp를 구성해요. 보간 타입은 RenderingHints 객체에서 결정해요. 보간 힌트가 정의되어 있으면 그것을 쓰고, 아니면 렌더링 품질 힌트의 값에서 결정해요. 힌트가 전혀 없으면(hints가 null) 보간 타입은 TYPE_NEAREST_NEIGHBOR예요.
예외: ImagingOpException — 변환이 비가역적(non-invertible)일 때
public AffineTransformOp(AffineTransform xform, int interpolationType)
아핀 변환과 보간 타입을 받아 구성해요. interpolationType은 TYPE_NEAREST_NEIGHBOR, TYPE_BILINEAR, TYPE_BICUBIC 중 하나예요.
예외: ImagingOpException — 변환이 비가역적일 때
메서드 상세
getInterpolationType()
public final int getInterpolationType()
이 op가 사용하는 보간 타입을 반환해요.
filter(BufferedImage src, BufferedImage dst)
public final BufferedImage filter(BufferedImage src, BufferedImage dst)
소스 BufferedImage를 변환하고 결과를 목적지 BufferedImage에 저장해요. 두 이미지의 색 모델이 일치하지 않으면 목적지 색 모델로 색 변환이 수행돼요. 목적지 이미지가 null이면 소스 ColorModel로 BufferedImage를 만들어요.
getBounds2D(BufferedImage)가 반환하는 사각형 좌표가 이 메서드가 반환하는 BufferedImage의 좌표와 반드시 같은 건 아니에요. 사각형의 왼쪽 위 모서리가 음수면 그 부분은 그려지지 않고, 양수면 필터링된 이미지가 목적지의 그 위치에 그려져요.
예외: IllegalArgumentException — src와 dst가 같을 때 / ImagingOpException — 잘못된 이미지·타일 형식, 이미지 처리 연산 또는 기타 지원하지 않는 연산으로 인한 데이터 처리 오류 때문에 이미지를 변환할 수 없을 때
filter(Raster src, WritableRaster dst)
public final WritableRaster filter(Raster src, WritableRaster dst)
소스 Raster를 변환하고 결과를 목적지 Raster에 저장해요. 이 연산은 밴드 단위로 변환을 수행해요. 목적지 Raster가 null이면 새 Raster를 만들어요. 소스가 목적지와 같거나 소스와 목적지의 밴드 수가 다르면 IllegalArgumentException이 던져질 수 있어요.
예외: ImagingOpException — 데이터 처리 오류 때문에 raster를 변환할 수 없을 때
getBounds2D(BufferedImage src) / getBounds2D(Raster src)
public final Rectangle2D getBounds2D(BufferedImage src)
public final Rectangle2D getBounds2D(Raster src)
변환된 목적지의 경계 상자(bounding box)를 반환해요. 반환된 사각형은 변환된 점들의 실제 경계 상자이며, 왼쪽 위 모서리 좌표가 (0, 0)이 아닐 수 있어요.
createCompatibleDestImage(BufferedImage src, ColorModel destCM)
public BufferedImage createCompatibleDestImage(BufferedImage src, ColorModel destCM)
올바른 크기와 밴드 수를 가진 0으로 채워진 목적지 이미지를 만들어요. 변환된 너비나 높이가 0이면 RasterFormatException이 던져질 수 있어요. destCM이 null이면 적절한 ColorModel이 사용되는데, 소스 ColorModel이 불투명해도 알파 채널을 가질 수 있어요.
createCompatibleDestRaster(Raster src)
public WritableRaster createCompatibleDestRaster(Raster src)
올바른 크기와 밴드 수를 가진 0으로 채워진 목적지 Raster를 만들어요. 변환된 너비나 높이가 0이면 RasterFormatException이 던져질 수 있어요.
getPoint2D(Point2D srcPt, Point2D dstPt)
public final Point2D getPoint2D(Point2D srcPt, Point2D dstPt)
소스의 한 점에 대응하는 목적지 점의 위치를 반환해요. dstPt가 지정되면 그 객체가 반환값을 담는 데 사용돼요.
getTransform()
public final AffineTransform getTransform()
이 변환 연산이 사용하는 아핀 변환을 반환해요.
getRenderingHints()
public final RenderingHints getRenderingHints()
이 변환 연산이 사용하는 렌더링 힌트를 반환해요.