2012-05-26 7 views
0

RGB1 * A1 + RGB2 * A2와 같이 단순하지 않은 것처럼 보입니다. 값은 어떻게 클리핑됩니까? 가중? 기타알파 블렌딩은 수학적으로 픽셀 단위로 어떻게 작동합니까?

그리고 이것은 상황에 따른 질문입니까? 결과가 다른 알고리즘이 있습니까? 아니면 하나의 표준 구현?

저는 OpenGL 관련 답변에 특히 관심이 있지만 다른 환경의 컨텍스트도 유용합니다.

+1

http://en.wikipedia.org/wiki/Alpha_blending#Alpha_blending –

답변

3

나는 OpenGL을 모르는,하지만 불투명 A의 한 픽셀은 보통과 같이 다른 픽셀에 그려진 :

result.r = background.r * (1 - A) + foreground.r * A 
result.g = background.g * (1 - A) + foreground.g * A 
result.b = background.b * (1 - A) + foreground.b * A 

반복 여러 픽셀이 작업.

1

위의 대답은 이미지가 미리 곱셈 된 알파가 아닌 경우 작동합니다. 그러나 미리 곱한 알파 이미지로 해당 유형의 블렌드를 사용하면 검은 색 테두리가 생깁니다.

미리 곱셈 알파 : 이미지가 생성되면

컬러 값이 알파 채널에 의해 곱해진다. 이 하나 개의 픽셀의 예를 살펴 :

Pixel: r = 1, g = 0, b = 0, a = 0.5 

이 저장되는 경우, RGB의 알엇는 알파 값을주는 곱한됩니다

Pixel: r = 0.5, g = 0, b = 0, a = 0.5 

당신이를 사용할 필요가 이미지의이 종류를 혼합 다음 식 :

result.r = background.r * (1 - A) + foreground.r 
result.g = background.g * (1 - A) + foreground.g 
result.b = background.b * (1 - A) + foreground.b 

비 알파 미리 곱셈

이 예제에서 알파 채널은 색상 채널과 완전히 별개입니다.

Pixel: r = 1, g = 0, b = 0, a = 0.5 

은 저장할 때 :

Pixel: r = 1, g = 0, b = 0, a = 0.5 

그것은 동일합니다. 이 경우 미니 텍에서 제공하는 답변이 정확합니다.

자세한 내용은 여기에서 찾을 수 있습니다 : Premultiplied alpha

관련 문제