Direct2D 및 High-DPI
DPI 인식 애플리케이션을 작성하는 것은 다양한 고DPI 표시 설정에서 UI(사용자 인터페이스)를 일관되게 멋지게 만드는 데 핵심적인 요소입니다. DPI를 인식하지 않지만 높은 DPI 표시 설정에서 실행되는 애플리케이션은 UI 요소의 잘못된 크기 조정, 잘린 텍스트 및 흐릿한 이미지를 포함하여 많은 시각적 아티팩트를 겪을 수 있습니다. DPI 인식에 대한 애플리케이션 지원을 추가하면 애플리케이션의 UI를 보다 예측 가능하게 만들어 사용자가 시각적으로 더 매력적이고 읽기 쉽게 만들 수 있습니다. 다행히 Direct2D를 사용하면 높은 DPI에서 잘 작동하는 애플리케이션을 그 어느 때보다 쉽게 작성할 수 있습니다. 이 항목에는 다음 섹션이 포함되어 있습니다.
Direct2D의 High-DPI 지원
Direct2D는 높은 DPI 시나리오를 사용하기 위해 다음과 같은 기능을 제공합니다.
- 애플리케이션 매니페스트가 애플리케이션이 DPI를 올바르게 처리한다는 것을 나타내기만 하면 창이 있는 렌더링 대상을 만들 때 시스템 DPI가 자동으로 적용됩니다. (애플리케이션이 DPI 인식임을 선언하는 방법에 대한 자세한 내용은 High-DPI 표시애플리케이션이 제대로 표시되는지 확인하는 방법을 참조하세요.)
- DPI 설정이 변경되면 애플리케이션의 크기를 자동으로 조정할 수 있는 DIP(디바이스 독립적 픽셀)로 좌표를 표현합니다.
- 이를 통해 비트맵에 DPI가 있고 DPI를 고려하여 올바르게 크기를 조정할 수 있습니다. 이 기능을 사용하여 다양한 해상도의 아이콘을 유지할 수도 있습니다.
- 대부분의 리소스를 DIP로 표현하므로 리소스가 해상도와 자동으로 독립적입니다.
- 부동 소수점 좌표 공간 및 앤티앨리어싱을 사용하므로 모든 콘텐츠를 임의의 DPI로 확장할 수 있습니다.
Direct2D 그래픽 파이프라인은 96DPI에서 1200DPI로 확장하도록 설계되었습니다.
Windows 8 및 High-DPI
Windows 8부터 높은 DPI 지원을 위한 추가 기능이 있습니다.
디바이스 컨텍스트 DPI가 충분히 높은 경우 Direct2D는 텍스트의 세로 앤티앨리어싱을 사용하도록 설정하는 데 사용하는 임계값을 변경합니다. 이로 인해 높은 DPI 디스플레이에서 텍스트 렌더링 속도가 빨라집니다. 또한 ID2D1DeviceContext::SetUnitMode 메서드를 사용하여 DIP 대신 단위 모드를 픽셀로 전환할 수 있습니다. 단위 모드를 픽셀로 설정하고 디바이스 컨텍스트 DPI를 화면 DPI로 설정하면 최적화가 계속 사용됩니다.
DIP란?
DIP(디바이스 독립적 픽셀)는 스칼라 DPI를 통해 물리적 디바이스의 픽셀에 매핑되는 논리적 픽셀입니다. DPI는 인치당 점을 의미하며, 점이 물리적 디바이스 픽셀을 나타냅니다. (명명법은 인쇄에서 가져온 것이며, 여기서 점들은 인쇄 과정에서 생성할 수 있는 가장 작은 잉크 점입니다). 표준 모니터는 인치당 96개의 점을 사용했기 때문에 DPI가 96이면 디바이스 독립적 픽셀(또는 DIP)이 실제 픽셀로 1:1 매핑됩니다. 예를 들어 DPI가 96*2 = 192인 경우 단일 DIP에는 두 개의 실제 픽셀이 포함됩니다.
애플리케이션에서 이 크기 조정을 올바르게 처리하지 않는 데는 여러 가지 이유가 있습니다. 가장 간단한 이유 중 하나는 렌더링할 때 이 스칼라 값을 검색하고 사용하기 위해 추가 작업이 필요하기 때문입니다. Direct2D에서는 크기 조정이 기본적으로 적용됩니다. 이 매핑으로 인해 물리적 디바이스 픽셀은 소수점 DIP 좌표로 끝날 수 있으며, 이는 Direct2D가 부동 소수점 좌표 공간을 사용하는 이유 중 하나입니다.
- 물리적 픽셀 = (dip × DPI) / 96
물리적 픽셀을 DIP로 변환하려면 다음 수식을 사용합니다.
- dip = (물리적 픽셀 × 96) / DPI
메모
Windows 8부터는 ID2D1DeviceContext::SetUnitMode 메서드를 사용하여 DIP 대신 단위 모드를 픽셀로 전환할 수 있습니다.
관련 항목
-
애플리케이션이 High-DPI 표시 제대로 표시되는지 확인하는 방법