2014-01-23 1 views
0

내 프로그램에서 두 개의 직사각형 사이의 영역을 일부 색으로 채우고 내부 직사각형을 흰색으로 채 웁니다. 내가하고있는 방법은 바깥 쪽 사각형을 그려 원하는 색으로 채운 다음 안쪽 사각형을 그리고 흰색으로 채 웁니다. 나는 사각형을 모두 그려 다음 그들 사이의 공간을 채울 수있는이 일을 어떤 다른 방법이 있는지 궁금하고
cairo_rectangle(cr, x1, y1, width1, height1);
cairo_set_source_rgb(cr,0,0,0);
cairo_fill(cr);
cairo_rectangle(cr, x2, y2, width2, height2);
cairo_set_source_rgb(cr,1,1,1);
cairo_fill(cr);
카이로 두 사각형 사이의 영역을 채우십시오.

을 다음과 같이

무엇인가?

+0

어떤 버전의 카이로? 그것은 중요하지 않지만, 경우에 따라서는 중요합니다. – oliverseal

+0

@ vernationalal 1.12.16 – sap

+0

질문을 다시 읽으면서 답변을 취소했습니다. 두께를 왜곡 한 다음 원하는 두께로 칠하는 것이 어떨까요? 비싸기 때문에 채우기 및 set_source_rgb 호출을 줄이려고한다고 가정합니다. – oliverseal

답변

0
cairo_rectangle(cr, x1, y1, width1, height1); 
cairo_rectangle(cr, x2, y2, width2, height2); 
/* Remember to reset this to CAIRO_FILL_RULE_WINDINIG if it matters for other code */ 
cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD); 
cairo_fill(cr); 
+0

저는 cairo_set_fill_rule()에 대해 알지 못합니다. 나는 카이로 매뉴얼에서 그것에 대해 읽었지만 잘 이해하지 못했다. CAIRO_FILL_RULE_EVEN_ODD - 교차로의 총 수가 홀수 일 경우 매뉴얼에 말하기를 포인트가 채워집니다. 내 사건이 어떻게 효과가 있을지 말해 주시겠습니까? – sap

+0

이것은 원래 생각 이었지만 다시 읽으면서 해결되지 않습니다. – oliverseal

+0

@sap : 귀하의 경우, 내부 직사각형 안의 픽셀에 대한 권선은 두 직사각형에 모두 들어 있기 때문에 2가됩니다. 이 값은 짝수이기 때문에 내부 사각형은 포함되지 않습니다. 두 직사각형 사이의 점은 하나의 와인딩 만 가지므로 채우기에 포함됩니다. 그래서 이것은 당신의 질문의 일부인 "그들 사이의 영역을 채우는 것"을 해결해야합니다. 당신이 무엇을 의미하는지 모르겠다 "사각형을 모두 그립니다. 아마도 cairo_fill_preserve (cr); cairo_set_source_rgb (cr, other_color); cairo_stroke (cr) ;? –

관련 문제