2013-01-03 9 views
0

System.Drawing.SolidBrush를 사용하여 반투명 삼각형을 그리는 일부 GDI 코드가 있습니다. 적절한 3D 렌더링 API (OpenGL/Direct3D11)를 사용하여 코드를 다시 구현하려고하지만 원본 GDI 코드와 동일한 출력을 얻으려면이 삼각형에 사용할 수식을 혼합하는 것이 확실하지 않습니다.System.Drawing.SolidBrush를 사용하는 혼합 방정식은 무엇입니까?

가 나는 그것이 첨가제 혼합과 같은 비교적 간단한 뭔가 가정 (FUNC = GL_FUNC_ADD, EQ = GL_ONE, GL_ONE) 또는 보간 (FUNC = GL_FUNC_ADD, EQ = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), 그러나 어느 쪽도 꽤 잘 볼 것 같다. 이것은 새 코드의 버그와 거의 같지만 계속하기 전에 올바른 대상을 향해 작업하고 있는지 확인하고 싶습니다. 아무도 적절한 혼합 방정식을 알고 있습니까?

편집 : 여기에 상황을 박탈 관련 C# 코드는 다음과 같습니다

using System.Drawing; 
SolidBrush b = new SolidBrush(Color.FromArgb(alpha,red,green,blue)); 
Point[] points = ...; 
Graphics g; 
g.FillPolygon(b,points); 

내 질문은, 무슨 색깔이 실제로 브러시의 RGBA 및 대상 픽셀의 RGBA의 관점에서 기록 될 것입니까? 내가 찾을 수있는 모든 문서는 "브러쉬의 투명도를 제어하기 위해 알파를 사용"하거나 동등하게 모호한 것을 말합니다. 나는 실제 혼합 방정식이 무엇인지 궁금해.

+0

다시 구현하려는 "GDI 코드"는 무엇입니까? –

+0

오랫동안 떠난 동역자의 일부 이미지 처리 코드로, 새로운 GDI 프로젝트로 부활시키고 통합하려고합니다. 구체적인 내용은 독점적 인 내용이지만 그 질문과 관련이있는 것은 아닙니다. 그래도 도움이된다면 관련 코드의 스 니펫을 추가했습니다. – postgoodism

답변

0

MSDN에 따르면 은 CompositingMode이라는 속성을 가지며 SourceOver 또는 SourceCopy 일 수 있습니다.

기본 하나

은 색상이 렌더링 될 때, 그것은 배경 색상과 혼합 수 있도록 지정하는 SourceOver이다. 블렌드는 렌더링되는 색상의 알파 성분에 의해 결정됩니다. 여기

Alpha composition equation

α : I 테스트함에

, 여기에서 사용 된 혼합 전략은 다음 식으로 화상 B 위에 영역 화상 A의 화소 값을 결정 alpha composition이며 a 및 α b은 이미지 A 및 이미지 B의 정규화 된 알파 값입니다. C 및 C b은 이미지 A 및 이미지 B의 RGBA 값입니다. C o은 출력 이미지의 RGBA 값입니다.