|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
java.lang.Objectjava.awt.AlphaComposite
public final class AlphaComposite
이 AlphaComposite
클래스는, 그래픽스와 이미지의 혼합의 효과 및 투명화의 효과를 실현하기 위해서(때문에), 전송원의 색과 전송처의 색을 결합하기 위한 기본적인 알파 합성 규칙을 구현합니다. 이 클래스에서 구현되는 특정의 규칙은, T. Porter 및 T. Duff 공저의 「Compositing Digital Images」(SIGGRAPH 84, 253~259)에 기술되고 있는 일련의 기본적인 12 의 규칙입니다. 이 문서에서는, 그 저서로 설명되고 있는 정의 및 개념에 대해, 어느 정도의 지식이 있는 것을 전제로 하고 있습니다.
이 클래스는, Porter 와 Duff 에 의해 정의된 표준의 식을 확장해, 계수를 1 개 추가하고 있습니다. AlphaComposite
클래스의 인스턴스에는, 합성식에서 사용하기 전에, 전송원의 픽셀의 투명도나 범위를 변경할 수 있는 알파치를 포함할 수 있습니다.
Porter 와 Duff 의 저서로 정의된 식은 모두, 대응하는 알파 성분에 의해 미리 곱셈된 색성분을 처리하도록(듯이) 정의되고 있습니다. ColorModel
클래스 및 Raster
클래스에서는, 픽셀 데이터를 미리 곱셈된 형식에서도, 곱셈되어 있지 않은 형식에서도 보존할 수 있기 (위해)때문에, 식을 적용하기 전에, 모든 입력 데이터를 미리 곱셈된 형식에 정규화할 필요가 있어, 픽셀치를 포함하기 전에, 모든 결과를 전송 먼저 따라 요구된 형식에 조정해 되돌리지 않으면 안 될 가능성이 있습니다.
이 클래스에서 정의하는 것은, 순수한 수학적 관념에 있어서의 색과 알파치의 합성의 식 뿐입니다. 이 식의 정확한 적용은, 데이터를 전송원으로부터 취득해, 전송 먼저 보존하는 방법에 따라서 다릅니다. 자세한 것은「구현의 주의」를 참조해 주세요.
Porter 와 Duff 의 저서에서는, 합성식의 설명으로 다음의 계수가 사용되고 있습니다.
계수 정의 As 전송원픽셀의 알파 성분 Cs 미리 곱셈된 형식에서의 전송원픽셀의 색성분 Ad 전송처 픽셀의 알파 성분 Cd 미리 곱셈된 형식에서의 전송처 픽셀의 색성분 Fs 전송원픽셀 가운데, 출력에 관계하는 부분 Fd 전송처 픽셀 가운데, 출력에 관계하는 부분 Ar 결과적으로 얻을 수 있는 알파 성분 Cr 미리 곱셈된 형식에서의 결과의 색성분
이상의 계수를 사용해, Porter 와 Duff 는 합성 계수 Fs 및 Fd 를 선택해, 12 종류의 목적의 시각 효과를 생성하는 12 방법의 방법을 정의하고 있습니다. Fs 및 Fd 를 결정하는 식은, 시각 효과를 지정하는 12 의 static 필드의 기술로 지정합니다. 예를 들어,SRC_OVER
의 기술에서는,Fs = 1 및 Fd = (1-As)를 지정합니다. 합성 계수를 결정하는 일련의 식을 알 수 있으면(자), 그것들을 각 픽셀에 적용해, 다음의 일련의 식을 사용해, 결과를 생성할 수 있습니다.
Fs = f(Ad) Fd = f(As) Ar = As*Fs + Ad*Fd Cr = Cs*Fs + Cd*Fd
이하의 계수를 사용해, Porter 와 Duff 의 저서의 합성식의 확장을 설명합니다.
계수 정의 Csr 전송원픽셀의 raw 색성분의 1 개 Cdr 전송처 픽셀의 raw 색성분의 1 개 Aac AlphaComposite 인스턴스의 「특수」알파 성분 Asr 전송원픽셀의 raw 알파 성분 Adr 전송처 픽셀의 raw 알파 성분 Adf 전송 먼저 보존되는 최종 알파 성분 Cdf 전송 먼저 보존되는 최종 raw 색성분
AlphaComposite
클래스는, 전송원의 알파에 적용하는 추가의 알파치를 정의합니다. 이 값은,AlphaComposite
의 알파에 의해 raw 전송원알파와 raw 전송원색의 양쪽 모두를 곱셈해 지정된 알파를 가지는 픽셀에 대해서, 최초로 암묵적인 SRC_IN 규칙을 전송원픽셀에 적용하고 있는것 같이 적용합니다. 이것은, Porter 와 Duff 의 합성식에서 사용되는 알파를 생성하는 다음과 같은 식이 됩니다.
As = Asr * Aac전송원 raw 색성분은 모두
AlphaComposite
인스턴스의 알파에서 곱셈할 필요가 있습니다. 게다가 전송원이 미리 곱셈된 형식이 아닌 경우에, 색성분을 전송원알파에서 곱셈할 필요가 있습니다. 그 때문에 Porter 와 Duff 식의 전송원색성분을 생성하는 식은, 전송원픽셀이 미리 곱셈되고 있는지 어떤지에 따라서 다릅니다.
Cs = Csr * Asr * Aac (전송원이 미리 곱셈되어 있지 않은 경우) Cs = Csr * Aac (전송원이 미리 곱셈되고 있는 경우)전송원알파를 조정할 필요는 없습니다.
Ad = Adr
전송처의 색성분은 미리 곱셈된 형식이 아닌 경우에게만 조정할 필요가 있습니다.
Cd = Cdr * Ad (전송처가 미리 곱셈되어 있지 않은 경우) Cd = Cdr (전송처가 미리 곱셈되고 있는 경우)
조정필 보고의 As,Ad,Cs, 및 Cd 를 표준 Porter 와 Duff 식에서 사용해, 합성 계수 Fs 및 Fd 를 계산해, 다음에 결과의 미리 곱셈되고 있는 성분 Ar 및 Cr 를 계산합니다.
결과는, 미리 곱셈되어 있지 않은 데이터를 포함하는 전송처 버퍼에 되돌리는 경우에게만, 다음의 식을 사용해 조정할 필요가 있습니다.
Adf = Ar Cdf = Cr (전송처가 미리 곱셈되고 있는 경우) Cdf = Cr / Ar (전송처가 미리 곱셈되어 있지 않은 경우)결과적으로 얻을 수 있는 알파가 제로의 경우의 제산은 정의되어 있지 않기 때문에, 그 경우의 제산은 무시해 「제로로 제산」을 피해 색성분은 모두 제로대로 해 둡니다.
퍼포먼스상의 이유이기 때문에,AlphaComposite
클래스에 의해 작성되는 CompositeContext
객체의 compose
메소드에 건네주는 Raster
객체에는 미리 곱셈된 데이터를 사용하는 것을 추천합니다. 전송원 Raster
또는 전송처 Raster
의 어느 쪽인지가 미리 곱셈되어 있지 않은 경우, 합성 처리의 전후에 적절한 변환을 실시합니다.
BufferedImage
클래스 로 거론된 불투명 이미지의 일부의 종류 등, 전송원으로 픽셀의 알파치를 포함하고 있지 않는 경우가 많이 있습니다. 그러한 전송 바탕으로는 모든 픽셀에 1.0 의 알파를 지정합니다.
BufferedImage.TYPE_BYTE_INDEXED
는 합성 처리의 전송처로서 사용해야 하지는 않습니다. 한정된 팔레트로부터 픽셀을 선택해, 합성식의 결과에 맞출 필요가 있기 (위해)때문에, 모든 처리로 큰 오차가 생길 가능성이 있기 때문입니다.
일반적으로, 정수 0 은 부동 소수점치 0.0 으로 동등으로 간주해져 정수 2^n-1 (n 는 표현의 비트수)는 1.0 으로 동등으로 간주해지도록(듯이), 정수치가 소수점치와 관련지을 수 있습니다. 8 비트 표현에서는, 0x00 는 0.0 을 나타내, 0xff 는 1.0 을 나타냅니다.
(A, R, G, B) = (0x01, 0xb0, 0x00, 0x00)
정수치 연산을 사용해, 이 값이 SRC
모드로, 특수 알파를 사용하지 않고 결합되고 있는 경우, 수치 연산의 결과는 (정수 형식에서) 다음과 같이 됩니다.
(A, R, G, B) = (0x01, 0x01, 0x00, 0x00)
중간치는 항상 미리 곱셈된 형식이며, 정수치의 빨강의 성분은 0x00 또는 0x01 의 어느 쪽인가의 보가 됩니다. 이 결과를 미리 곱셈되어 있지 않은 전송 먼저 되돌리려고 하는 경우, 알파를 제산하면(자), 미리 곱셈되어 있지 않은 빨강의 값의 선택사항은 거의 없습니다. 이 경우, 쇼트 컷없이, 정수 스페이스에서 수치 연산을 실행하는 구현의 최종적인 픽셀치는 다음과 같이 됩니다.
(A, R, G, B) = (0x01, 0xff, 0x00, 0x00)
(0x01 를 0x01 로 제산하면(자) 1.0 이 되어, 이것은 8 비트 포함 형식에서의 값 0xff 에 동일해집니다.
또는, 부동 소수점 연산을 사용하는 구현에서는, 보다 정확한 결과가 생성되어 거의 둥근 오차가 없는 원의 픽셀치에 돌아옵니다. 혹은, 정수치 연산을 사용하는 구현에서는, 부동 소수점 스페이스에서 실행했을 경우에, 식은 색치의 가상 NOP 가 되기 (위해)때문에, 무수정의 픽셀을 전송 먼저 전송 할 수 있어 모든 수치 연산을 피할 수가 있습니다.
이러한 구현은 모두 같은 식에 따르려고 합니다만, 정수와 소수점 수치 연산, 및 단축한 식과 완전한 식의 다양한 트레이드 오프가 필요합니다. 그러한 차이를 상쇄하기 위해(때문에), 미리 곱셈된 결과의 형식이 구현과 이미지 형식에서 일치하고 있는 것만을 기대하는 것이 가장 바람직하다고 생각됩니다. 이 경우, 미리 곱셈된 형식에서 나타내진 양쪽 모두의 대답이 다음에 동일해집니다.
(A, R, G, B) = (0x01, 0x01, 0x00, 0x00)
따라서, 그것들은 모두 일치합니다.
Composite
,
CompositeContext
필드의 개요 | |
---|---|
static AlphaComposite |
Clear
1. 0f 의 알파를 가지는, 불투명의 CLEAR 규칙을 구현하는 AlphaComposite 객체입니다. |
static int |
CLEAR
전송처의 색 및 알파의 양쪽 모두가 클리어 됩니다 (Porter-Duff Clear 규칙). |
static AlphaComposite |
Dst
1. 0f 의 알파를 가지는, 불투명의 DST 규칙을 구현하는 AlphaComposite 객체입니다. |
static int |
DST
전송처는 변경되지 않습니다 (Porter-Duff Destination 규칙). |
static int |
DST_ATOP
전송처의 전송원내부에 있는 부분이, 전송 바탕으로 거듭해 맞출 수 있어 이 결과 생성된 색으로 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Destination Atop Source 규칙). |
static int |
DST_IN
전송처의 전송원의 내부에 있는 부분에서 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Destination In Source 규칙). |
static int |
DST_OUT
전송처의 전송원의 밖에 있는 부분에서 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Destination Held Out By Source 규칙). |
static int |
DST_OVER
전송처는 전송원 우에에 겹쳐 맞출 수 있어 이 결과 생성된 색으로 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Destination Over Source 규칙). |
static AlphaComposite |
DstAtop
1. 0f 의 알파를 가지는, 불투명의 DST_ATOP 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
DstIn
1. 0f 의 알파를 가지는, 불투명의 DST_IN 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
DstOut
1. 0f 의 알파를 가지는, 불투명의 DST_OUT 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
DstOver
1. 0f 의 알파를 가지는, 불투명의 DST_OVER 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
Src
1. 0f 의 알파를 가지는, 불투명의 SRC 규칙을 구현하는 AlphaComposite 객체입니다. |
static int |
SRC
전송원이 전송 먼저 카피됩니다 (Porter-Duff Source 규칙). |
static int |
SRC_ATOP
전송원의 전송처 내부에 있는 부분이, 전송 먼저 거듭해 배합할 수 있습니다(Porter-Duff Source Atop Destination 규칙). |
static int |
SRC_IN
전송원의 전송처 내부에 있는 부분에서 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Source In Destination 규칙). |
static int |
SRC_OUT
전송원의 전송처의 밖에 있는 부분에서 전송처를 옮겨놓을 수 있습니다 (Porter-Duff Source Held Out By Destination 규칙). |
static int |
SRC_OVER
전송원래는 전송처 우에에 겹쳐 맞출 수 있습니다 (Porter-Duff Source Over Destination 규칙). |
static AlphaComposite |
SrcAtop
1. 0f 의 알파를 가지는, 불투명의 SRC_ATOP 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
SrcIn
1. 0f 의 알파를 가지는, 불투명의 SRC_IN 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
SrcOut
1. 0f 의 알파를 가지는, 불투명의 SRC_OUT 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
SrcOver
1. 0f 의 알파를 가지는, 불투명의 SRC_OVER 규칙을 구현하는 AlphaComposite 객체입니다. |
static AlphaComposite |
Xor
1. 0f 의 알파를 가지는, 불투명의 XOR 규칙을 구현하는 AlphaComposite 객체입니다. |
static int |
XOR
전송원의 전송처의 밖에 있는 부분이, 전송처의 전송원의 밖에 있는 부분과 혼합됩니다 (Porter-Duff Source Xor Destination 규칙). |
메소드의 개요 | |
---|---|
CompositeContext |
createContext (ColorModel srcColorModel,
ColorModel dstColorModel,
RenderingHints hints)
합성 조작의 문맥을 작성합니다. |
AlphaComposite |
derive (float alpha)
지정된 알파치를 사용하는 유사한 AlphaComposite 객체를 돌려줍니다. |
AlphaComposite |
derive (int rule)
지정된 합성 규칙을 사용하는 유사한 AlphaComposite 객체를 돌려줍니다. |
boolean |
equals (Object obj)
지정한 객체가 이 AlphaComposite 와 같은지 어떤지를 판정합니다. |
float |
getAlpha ()
이 AlphaComposiste 의 알파치를 돌려줍니다. |
static AlphaComposite |
getInstance (int rule)
지정된 규칙을 사용해 AlphaComposite 객체를 생성합니다. |
static AlphaComposite |
getInstance (int rule,
float alpha)
지정된 규칙과 전송원의 알파에 거는 정수 알파를 사용해 AlphaComposite 객체를 생성합니다. |
int |
getRule ()
이 AlphaComposite 의 합성 규칙을 돌려줍니다. |
int |
hashCode ()
이 합성의 해시 코드를 돌려줍니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , finalize , getClass , notify , notifyAll , toString , wait , wait , wait |
필드의 상세 |
---|
public static final int CLEAR
Fs = 0,Fd = 0 의 경우, 다음과 같이 됩니다.
Ar = 0 Cr = 0
public static final int SRC
Fs = 1,Fd = 0 의 경우, 다음과 같이 됩니다.
Ar = As Cr = Cs
public static final int DST
Fs = 0,Fd = 1 의 경우, 다음과 같이 됩니다.
Ar = Ad Cr = Cd
public static final int SRC_OVER
Fs = 1,Fd = (1-As)의 경우, 다음과 같이 됩니다.
Ar = As + Ad*(1-As) Cr = Cs + Cd*(1-As)
public static final int DST_OVER
Fs = (1-Ad),Fd = 1 의 경우, 다음과 같이 됩니다.
Ar = As*(1-Ad) + Ad Cr = Cs*(1-Ad) + Cd
public static final int SRC_IN
Fs = Ad,Fd = 0 의 경우, 다음과 같이 됩니다.
Ar = As*Ad Cr = Cs*Ad
public static final int DST_IN
Fs = 0,Fd = As 의 경우, 다음과 같이 됩니다.
Ar = Ad*As Cr = Cd*As
public static final int SRC_OUT
Fs = (1-Ad),Fd = 0 의 경우, 다음과 같이 됩니다.
Ar = As*(1-Ad) Cr = Cs*(1-Ad)
public static final int DST_OUT
Fs = 0,Fd = (1-As)의 경우, 다음과 같이 됩니다.
Ar = Ad*(1-As) Cr = Cd*(1-As)
public static final int SRC_ATOP
Fs = Ad,Fd = (1-As)의 경우, 다음과 같이 됩니다.
Ar = As*Ad + Ad*(1-As) = Ad Cr = Cs*Ad + Cd*(1-As)
public static final int DST_ATOP
Fs = (1-Ad),Fd = As 의 경우, 다음과 같이 됩니다.
Ar = As*(1-Ad) + Ad*As = As Cr = Cs*(1-Ad) + Cd*As
public static final int XOR
Fs = (1-Ad),Fd = (1-As)의 경우, 다음과 같이 됩니다.
Ar = As*(1-Ad) + Ad*(1-As) Cr = Cs*(1-Ad) + Cd*(1-As)
public static final AlphaComposite Clear
AlphaComposite
객체입니다.
CLEAR
public static final AlphaComposite Src
AlphaComposite
객체입니다.
SRC
public static final AlphaComposite Dst
AlphaComposite
객체입니다.
DST
public static final AlphaComposite SrcOver
AlphaComposite
객체입니다.
SRC_OVER
public static final AlphaComposite DstOver
AlphaComposite
객체입니다.
DST_OVER
public static final AlphaComposite SrcIn
AlphaComposite
객체입니다.
SRC_IN
public static final AlphaComposite DstIn
AlphaComposite
객체입니다.
DST_IN
public static final AlphaComposite SrcOut
AlphaComposite
객체입니다.
SRC_OUT
public static final AlphaComposite DstOut
AlphaComposite
객체입니다.
DST_OUT
public static final AlphaComposite SrcAtop
AlphaComposite
객체입니다.
SRC_ATOP
public static final AlphaComposite DstAtop
AlphaComposite
객체입니다.
DST_ATOP
public static final AlphaComposite Xor
AlphaComposite
객체입니다.
XOR
메소드의 상세 |
---|
public static AlphaComposite getInstance(int rule)
AlphaComposite
객체를 생성합니다.
rule
- 합성 규칙
IllegalArgumentException
- rule
가
CLEAR
,SRC
,DST
,
SRC_OVER
,DST_OVER
,SRC_IN
,
DST_IN
,SRC_OUT
,DST_OUT
,
SRC_ATOP
,DST_ATOP
, 또는 XOR
의 머지않아도 아닌 경우public static AlphaComposite getInstance(int rule, float alpha)
AlphaComposite
객체를 생성합니다. 전송처와 합성되기 전에, 전송원래는 지정된 알파에서 곱셈됩니다.
rule
- 합성 규칙alpha
- 전송원의 알파에 거는 정수 알파.
alpha
는, 범위 [0.0, 1. 0] (양단을 포함한다)의
부동 소수점수(실수)치가 아니면 안된다
IllegalArgumentException
- 다음의 조건이 성립하는 경우:
alpha
가 0.0 보다 작은가 1.0 보다 큰 경우, 또는
rule
가
CLEAR
,SRC
,DST
,
SRC_OVER
,DST_OVER
,SRC_IN
,
DST_IN
,SRC_OUT
,DST_OUT
,
SRC_ATOP
,DST_ATOP
, 또는 XOR
의 머지않아도 아닌 경우public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints)
Composite
내의 createContext
srcColorModel
- 전송원 ColorModel
dstColorModel
- 전송처의 ColorModel
hints
- 문맥 객체가 draw의 선택사항을 선택할 경우에
사용하는 힌트
CompositeContext
객체public float getAlpha()
AlphaComposiste
의 알파치를 돌려줍니다. 이 AlphaComposiste
가 알파치를 가지지 않는 경우는, 1.0 이 돌려주어집니다.
AlphaComposite
의 알파치public int getRule()
AlphaComposite
의 합성 규칙을 돌려줍니다.
AlphaComposite
의 합성 규칙public AlphaComposite derive(int rule)
AlphaComposite
객체를 돌려줍니다. 지정된 합성 규칙이 이 객체로 벌써 사용되고 있는 경우는, 이 객체가 돌려주어집니다.
rule
- 합성 규칙
AlphaComposite
객체
IllegalArgumentException
- 다음의 조건이 성립하는 경우:
rule
가
CLEAR
,SRC
,DST
,
SRC_OVER
,DST_OVER
,SRC_IN
,
DST_IN
,SRC_OUT
,DST_OUT
,
SRC_ATOP
,DST_ATOP
, 또는 XOR
의 머지않아도 아닌 경우public AlphaComposite derive(float alpha)
AlphaComposite
객체를 돌려줍니다. 지정된 알파치가 이 객체로 벌써 사용되고 있는 경우는, 이 객체가 돌려주어집니다.
alpha
- 전송원의 알파에 거는 정수 알파.
alpha
는, 범위 [0.0, 1. 0] (양단을 포함한다)의
부동 소수점수(실수)치가 아니면 안된다
AlphaComposite
객체
IllegalArgumentException
- 다음의 조건이 성립하는 경우:
alpha
가 0.0 보다 작은가 1.0 보다 큰 경우public int hashCode()
Object
내의 hashCode
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
AlphaComposite
와 같은지 어떤지를 판정합니다.
인수가 null
가 아니고, 이 객체와 같은 합성 규칙 및 알파치를 사용하는 AlphaComposite
객체인 경우만, 결과가 true
가 됩니다.
Object
내의 equals
obj
- 동일한지 어떤지가 판정되는 Object
obj
가 이 AlphaComposite
와 동일한 경우는 true
,
그렇지 않은 경우는 false
Object.hashCode()
,
Hashtable
|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.