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