2012-01-12 9 views
1

레이어를 지원하는 기본 이미지 편집 도구로 작업 중이며 레이어를 단일 이미지로 병합하는 방법을 알아야합니다. 분명히, 픽셀에 알파 값이 없다면, 둘 중 어떤 것이 먼저 승리 하나, 픽셀에 알파 값이있을 때 무엇을 해야할지 모릅니다. 여기에 질문이 있습니다 : RGBA 값을 사용하여 표현 된 2 개 이상의 픽셀을 감안할 때이 컨텍스트 (레이어)에서 어떻게 하나의 픽셀로 병합합니까? 계층의 각 구성 요소에 대한 TIA이미지 레이어 병합

+0

모든 : http://en.wikipedia.org/wiki/Alpha_compositing –

답변

2

, 알파 값이 a (범위 0..1) 인 경우는 해당 구성 요소의 비율 a + 아래 무엇의 비율 1-a를 볼 수 있습니다.

하단 레이어에서 상단 레이어로 작업 해보십시오.

편집 : 당신이 알아야

#define MAX_PIXEL 255 

int numLayers; // Number of layers. 
Color* layers; // Pointer to the layers. 

Color flattened; 

flattened.R = 0; 
flattened.G = 0; 
flattened.B = 0; 
flattened.A = MAX_PIXEL; 

// Layer 0 is the bottom layer. 
for (int i = 0; i < numLayers; i++) { 
    int alpha; 

    alpha = layers[i].A; 

    flattened[i].R = (layers[i].R * alpha + flattened[i].R * (MAX_PIXEL - alpha))/MAX_PIXEL; 
    flattened[i].G = (layers[i].G * alpha + flattened[i].G * (MAX_PIXEL - alpha))/MAX_PIXEL; 
    flattened[i].B = (layers[i].B * alpha + flattened[i].B * (MAX_PIXEL - alpha))/MAX_PIXEL; 
} 
+0

를 코드 예제처럼, 당신은 더 구체적 수 있다고 생각합니까? R, G, B, A에 대한 int로 구성된 Color라는 구조체가 있다고 가정하면 어떻게됩니까? – mtmurdock

+0

@mtmurdock : 저는 무슨 뜻인지 보여주는 대답을 편집했습니다. – MRAB