17

RGB 이미지 (전경 이미지)를 RGB 이미지 (배경 이미지)에 알파 블렌드 작업을 시도하고 있습니다. 그러나 그렇게하는 동안 잘못된 알파 블렌딩 작업을 수행하거나 잘못 수행했을 수 있습니다. 예를 들어, 내 RGB 이미지의 픽셀은 칙칙한 색 (127, 127, 127)입니다. 픽셀에 대한 내 RGBA 이미지의 픽셀은 (0, 0, 255)입니다. 블렌드 작업을 마친 후 최종 색상은 (127, 0, 255)가됩니다. 그러나, 나는 그것이 부가적인 블렌드이고 내가하는 작업과 다른 것이라고 생각했다. 내 값을 설정하는 방법에 대해서는RGBA 픽셀을 RGB 픽셀로 수동으로 알파 블렌딩

, 나는 것, 알파 없음으로 픽셀이

float incAlpha = (currentPixelColor[3]/255.0f); 

float red = ((float)incPixelColor[0]/255.0f * incAlpha) + ((float)currentPixelColor[0]/255.0f); 
float green = ((float)incPixelColor[1]/255.0f * incAlpha) + ((float)currentPixelColor[1]/255.0f); 
float blue = ((float)incPixelColor[2]/255.0f * incAlpha) + ((float)currentPixelColor[2]/255.0f); 


currentPixelColor[0] = min(red * 255, 255.0f); 
currentPixelColor[1] = min(green * 255, 255.0f); 
currentPixelColor[2] = min(blue * 255, 255.0f); 

살펴보고, 내 계산이 설정 방법은이

incPixelColor[0] = 0; (red) 
incPixelColor[1] = 0; (green) 
incPixelColor[2] = 255; (blue) 
incPixelColor[3] = 255; (alpha) 

currentPixelColor[0] = 127; (red) 
currentPixelColor[1] = 127; (green) 
currentPixelColor[2] = 127; (blue) 

를 살펴 값이 (0, 0, 255) 인 경우 알파가 포함 된 이미지의 경우 해당 값을 혼합하고 싶습니다. 위 작업의 끝에서 (127, 127, 255)가됩니다. 모든 픽셀에 대해 알파가 있는지 확인해야합니까? 그렇다면 블렌드를 수행하거나 다른 방법이 있습니까?

+0

첨가제 혼합을 수행하고 있습니다. 다음과 같이 선형 믹싱을 고려하십시오. y = (x0 * w) + (x1 * (1-w)) –

+1

작업이 정규화를 유지하는 경우에는 필요하지 않습니다. – fche

답변

22

조화 "이상"전형적인는 다음과 같은 방법으로 수행됩니다

outputRed = (foregroundRed * foregroundAlpha) + (backgroundRed * (1.0 - foregroundAlpha)); 

그리고 파란색과 녹색 채널에 대한 반복. 모든 픽셀에 대해 이렇게하십시오.

+0

아마 내가 잘못 본 것이지만, 이미 내가하고있는 일이 아닌가? – mmurphy

+0

아니, 당신이하고있는 일은 outputRed = (foreRed * foreAlpha) + backgroundRed입니다. backgroundRed에 (1.0 - foreAlpha)를 곱해야합니다. – user1118321

+0

너무 늦어서 죄송 합니다만 대상 픽셀과 원본 픽셀이 모두 투명하면 알파 출력 알파 채널은 어떻게됩니까? –

2

배경 (currentPixelColor)에 대한 (1-Alpha) 배율을 놓친 것 같습니다.