코스메틱 라인

화장품 선은 항상 너비가 1픽셀이며 단색 브러시를 사용하여 그려집니다. GIQ(Grid 교차 양자화) 다이아몬드 규칙에 따라 렌더링되며, 이는 화장품 라인을 렌더링하기 위해 켜야 하는 픽셀을 결정합니다.

다음 그림에서는 픽셀이 그리드 교차점에 있는 사각형 눈금에 겹쳐진 선을 보여 줍니다. 조명해야 하는 픽셀을 확인하려면 다이아몬드를 선 가운데에 두고 슬라이딩한다고 상상해 보십시오. 다이아몬드의 너비와 높이는 인접한 픽셀 중심 사이의 거리와 정확히 같습니다. 다이아몬드가 선을 따라 이동하면 가운데가 다이아몬드로 완전히 덮인 픽셀이 켜집니다. 선이 인접한 두 픽셀 사이의 중간 지점을 통과하는 경우 켜지는 픽셀은 선의 기울기 및 인접 픽셀의 방향(가로(나란히) 또는 세로(다른 픽셀 위)에 따라 달라집니다.

다음 표에서는 이러한 사례를 요약합니다.

선 기울기(절대값) 인접한 픽셀은 지향적입니다. 결과

기울기 < 1

또는
기울기 > 1

가로로

다이아몬드의 왼쪽 꼭짓점에서 픽셀을 밝습니다.

기울기 < 1

또는
기울기 > 1

세로로

다이아몬드의 위쪽 꼭짓점에서 픽셀을 밝습니다.

기울기 = 1

가로로

다이아몬드의 위쪽 꼭짓점에서 픽셀을 밝습니다.

기울기 = 1

세로로

다이아몬드의 오른쪽 꼭짓점에서 픽셀을 밝습니다.

다이아몬드 규칙은 -1과 1 사이의 기울기를 가진 줄에 대해 각 열에서 1픽셀, 절대값이 1보다 큰 줄의 경우 각 행에 1픽셀을 표시합니다. 이렇게 하면 간격 없이 화장품 선이 렌더링됩니다.

화장품 선의 시작 및 끝 픽셀도 다이아몬드 규칙에 따라 결정됩니다. 화장품 선은 첫 번째 픽셀 포괄 및 마지막 픽셀 배타적입니다. 즉, 선이 다이아몬드 내부에서 픽셀로 시작되면 해당 픽셀이 비춥니다. 마찬가지로 선이 다이아몬드 내부에서 픽셀 단위로 끝나는 경우 해당 픽셀은 비추지 않습니다.

다음 그래프는 화장품 선에 대한 다이아몬드 규칙을 보여 줍니다.

diagram illustrating diamond convention for a cosmetic line.

코스메틱 라인을 렌더링하기 위해 DrvStrokePath 함수는 GIQ 다이아몬드 규칙을 따릅니다. DrvLineTo 함수는 드라이버가 Microsoft Win32 LineTo 함수에 대한 애플리케이션 호출에 대한 최적화로 제공할 수 있는 선택적 진입점입니다. DrvLineTo 는 정수 끝점과 단색 화장품 라인만 지원하므로 DrvStrokePath 보다 간단합니다.

대상 색을 역으로 변경하는 이진 래스터 작업인 R2_NOT 혼합 모드를 지원하는 래스터 디바이스의 경우 드라이버는 정확한 렌더링을 사용해야 합니다. 렌더링은 GDI와 드라이버 모두에서 렌더링해야 하는 디바이스에도 정확해야 합니다. 여기에는 GDI가 일부 비트맵에 그려지고 드라이버가 다른 표면에 그리는 디바이스가 포함됩니다(픽셀이 너무 작아서 눈에 보이는 차이를 만들지 않는 한). 여기에는 복잡한 클리핑을 처리하기 위해 GDI를 요청하는 디바이스도 포함됩니다.