2016-09-26 3 views
0

나는 C#에서 배경색에 점차 섞이는 가장자리를 가진 폴리곤을 그릴 수있는 가장 좋은 방법을 찾고 있습니다. 폴리곤을 비트 맵으로 그리기 때문에 현재는 System.Drawing의 Graphics 클래스를 사용하고 있습니다.블렌드 된 엣지가있는 폴리곤

다각형은 혼합 마스크가 될 것이고, 나는 polgons을 흑백으로 그릴 때 아무런 문제가 없습니다. 그러나 나는 그들이 일정한 양의 픽셀에 걸쳐 두 색 사이를 점차적으로 전환하기를 원한다. 50 픽셀 (그 크기를 지정해야한다)이라고하자.

PathGradiantBrush를 보았지만 전환 영역의 크기를 지정하는 방법을 찾을 수 없었습니다. 그 브러시로 전환은 다각형의 크기와 모양에 의존하고 고정 된 크기가 아닌 것처럼 보입니다.

그런 다각형을 그릴 가장 좋은 방법은 무엇입니까?

+1

실제로 추가 한 태그 설명에 따라 Microsoft Blend를 사용하고 있습니까? – Sayse

+0

예제 이미지를 게시하여 명확하게 할 수 있습니까? – TaW

답변

1

는 다른 답변에서 볼 수 있듯이, 그라데이션 브러쉬 여기서

는 FocusScales의 사용을 도시 this page의 예는 중심의 그래디언트로 경로 또는 다각형을 채 웁니다. 당신은 중심점을 설정할 수 있습니다하지만 그들은 여전히 ​​정말 다각형의 가장자리를 따라하지 않습니다 당신은 내가 그랬던 것처럼, Transparent 적합한 Positions에가는 ColorBlend을 작성하여 각 색상 밴드의 상대 폭에 영향을 미칠 수

enter image description here

을 위의 결과에서 중심점을 향한 egdes의 각도와 경계 사각형과의 거리가 여전히 절대 너비를 결정합니다. 당신의 다각형이 원형에 가까워하지 않는 한,가 muliticolor의 그라데이션 브러시 예를 들어 see here!


그래서, 당신은 다르게 할 필요가있다. 여기

는 가장자리를 따른다 용액는 다음과 GraphicsPath path (또는 단순히 Point 어레이)를 사용

enter image description here

하고 제 배경색 채워 gGraphics 오브젝트 후 끌어 너비와 투명도가 모두 커지는 펜을 사용하는 경로. 바깥 쪽 가장자리를 제자리에두고 불투명하게 유지하려면 Pen.Alignment = PenAlignment.Inset을 설정합니다. 숫자를 가지고 게임을 할 수 있습니다. :

왼쪽 가장자리가 약간 두꺼워 보이지만 실제로는 그렇지 않습니다.

+0

감사합니다. 모양의 가장자리에 다른 선을 그리는이 방법은 내가하고 싶은 일에 적합합니다.나는 그것을 시도 할 것이다. –

0

MSDN에서 Path Gradient Brush를 살펴본 결과 the FocusScales property에 대해 알아 냈습니다.이 문제는 여러분이 직면 한 문제를 해결하려고 시도했다고 생각합니다.

// Create a path that consists of a single ellipse. 
GraphicsPath path; 
path.AddEllipse(0, 0, 200, 100); 

// Create a path gradient brush based on the elliptical path. 
PathGradientBrush pthGrBrush(&path); 
pthGrBrush.SetGammaCorrection(TRUE); 

// Set the color along the entire boundary to blue. 
Color color(Color(255, 0, 0, 255)); 
INT num = 1; 
pthGrBrush.SetSurroundColors(&color, &num); 

// Set the center color to aqua. 
pthGrBrush.SetCenterColor(Color(255, 0, 255, 255)); 

// Use the path gradient brush to fill the ellipse. 
graphics.FillPath(&pthGrBrush, &path); 

// Set the focus scales for the path gradient brush. 
pthGrBrush.SetFocusScales(0.3f, 0.8f); 

// Use the path gradient brush to fill the ellipse again. 
// Show this filled ellipse to the right of the first filled ellipse. 
graphics.TranslateTransform(220.0f, 0.0f); 
graphics.FillPath(&pthGrBrush, &path); 

출력의 예 :

Example of FocusScales