Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

Recommended Posts

짐 맥키트(Jim McKeeth)가 작성한 High-DPI on Windows 10을 번역했습니다.

6864.HighDPI-on-Windows-10.png모니터와 관련하여 우리는 종종 해상도(예: 1920x1080)와 대각선 길이(예: 27" 또는 68.58cm)를 이야기한다. 이 정보와 피타고라스 정리를 활용하면, DPI를 파악할 수 있다. 아래의 DPI와 PPI에 대한 설명을 참고). 해상도를 높이지 않는다면, 화면이 커질수록 DPI는 낮아진다.

  • DPI = (sqrt (sqr (폭) + sqr (높이)) / 대각선

처음에 윈도우는 모든 모니터의 DPI를 96로 간주했었다 (실제로는 72 PPI를 사용한다). 윈도우 XP에서는 GDI+가 추가되어서 해상도에 의지하지 않고도 텍스트를 확대/축소할 수 있게 되었다. 윈도우 비스타(Vista)에서는 High DPI 디스플레이 지원이 추가됨에 따라 더 많은 픽셀을 사용할 수 있게 되어서 텍스트는 더 선명하게 이미지는 더 자세하게 표현할 수 있어 졌다. 하지만, 앱이 High DPI를 지원한다고 알려주지 않는 경우에 윈도우는 앱을 여전히 96DPI로 취급했다. 윈도우 7에서는  모니터의 실제 픽셀 밀도을 파악하여 값을 얻을 수 있게 되었다.  윈도우 10에서는 모니터 별로 독립적으로 DPI에 맞게 확대/축소할 수 있게 되었다.

(96 DPI 이상인) High DPI 모니터를 사용하는 경우, 윈도우에서 화면 배율을 지정하면, 확대된 화면에서 내용이 너무 작고 읽기 힘들어 지는 것이 아니라, 더 선명한 폰트와 더 자세한 이미지를 볼 수 있다.

1106.Scale-and-Layout.png
그림. 윈도우 10 화면 설정에서 화면 배율 지정

윈도우 10의 이 변화가 개발자에게 의미하는 바는, 10.3 리오부터 윈도우 VCL로 High DPI 애플리케이션 개발할 수 있게 되었다는 점이다.

  • High DPI 이미지 리스트 지원
  • Per Moniter V2 지원
  • 새로운 스타일들
  • 윈도우 API들 업데이트

마르코 칸투는  Per Monitor v2 지원에 대한 글을 통해서 개발자가 윈도우 10의 새 기능을 활용하여 모니터 별로 해당 DPI를 파악할 수 있는 앱을 개발할 수 있게 되었다는 점을 설명했다. 이 DPI Awareness 옵션은 Project > OptiosApplication > Manifest에 있다. 새 VCL 프로젝트를 만들면 디펄트 설정인 Per Monitor v2가 반영된다. 기존의 프로젝트에서 High DPI를 지원하려면 이 옵션을 직접 Per Monitor v2로 바꾸면 된다. 

4721.PerMonitorV2Manifest_2D00_Rio.png
그림. RAD 스튜디오 프로젝트 옵션 설정에서 DPI Awareness 지정

VCL프로젝트에서 Per Monitor v2 옵션을 지정하여 빌드한 VCL 앱은 자동으로 화면에 맞추어 크기를 변경한다. 하지만, 관련하여 VCL.Classes 유닛에 GetSystemMetricForWindow 함수가 새로 추가되었다. 이 함수는 윈도우의 새 API인 GetSystemMetricsForDPI를 활용한다 (참고로, 이 새 윈도우 API는 안에서 이전의 GetSystemMetrics를 활용한다). GetSystemMetricForWindow 함수를 이용하면 개발자는 앱이 표현되고 있는 현재의 모니터에서 파악된 내용을 기반으로, 앱의 각 창 별로 해당 매트릭, 해상도, DPI를 얻을 수 있다.

TControl (과 그 하위 컨트롤)에는 GetSystemMetrics 메소드가 제공된다. 이 메소드를 호출하면 업데이트된 정보가 자동으로 제공되므로 기존 코드를 쉽게 마이그레이션 할 수 있다. TControl에는 이 메소드  이외에도 CurrentPPI 속성이 있다.

10.3-_2D00_-high-dpi-_2D00_-scaled-app-_2D00_-trimmed.png
그림. TControl (과 그 하위 컨트롤)은 화면의 DPI에 맞추어 이미지를 선명하게 표현할 수 있다.

새 VCL High DPI 이미지 리스트는 마술같은 멋진 컴포넌트로써 TImageCollection과 TVirtualImageList로 구성된다. 이 컴포넌트 세트 사용에 대한 내용은 데이비드 밀링턴의 글에 잘 설명되어 있다. 이 컴포넌트 세트 덕분에 High DPI 화면에서 고해상도 그래픽를 자동으로 활용하는 앱을 정말 쉽게 만들 수 있다. 새 이미지 리스트는 윈도우의 기본 이미지 리스트 이상을 담고 있어서 여러분의 VCL 앱이 멋지게 표현될 수 있도록 한다.

10.3-_2D00_-image-collection-editor.PNG
그림. TImageCollection에는 이미지 별로 다양한 해상도의 이미지를 추가/편집/삭제할 수 있다

6886.RioVclStyles.png이 기능들을 (겟잇에서 제공하는) 10.3 리오에서 추가된 새 VCL 스타일과 함께 사용하자. 개발자는 VCL 앱이 윈도우 10에서 작동될 때 어떤 모니터에서도 멋진 모습이 되로록 하는데 필요한 모든 것을 다 가졌다. 10.3 리오에서는 이것 이외에도 많은 새 기능과 업데이트가 있다.

DPI와 PPI에 대한 설명

DPI는 이미지를 구성하는 각 점들의 밀도를 측정한 것이다. 이 점들은 화면이나 지면에 표현될 때 사용되는 점이다.  하지만, 지금은 모니터 화면에서 이미지를 표현하는 개별 요소인 픽셀을 중심으로 이야기 해보자. 인치 당 점의 갯수인 DPI는 화면 상에서는 1인치 당 점인 픽셀의 갯수이다 (1인치가 2.54cm이므로 254DPI는 100DPCM이고, 100DPI는 39.37DPCM이지만, 지금은 DPI만 사용하기로 하자).

종이에 찍히는 잉크 점 하나와 화면에 펴현되는 픽셀 하나 사이에는 기술적인 차이점이 있다. 따라서 모니터에서는 Pixels Per Inch (PPI)가 정확한 용어이지만 DPI와 PPI가 같은 의미로 사용되는 경우가 흔하다. 대부분의 모니터에는 서브 픽셀(sub-pixel)이 있다. 서브 픽셀은 (빨강, 녹색, 청색와 아마 하얀색인) 각 개별 색상 요소이며, 모여서 하나의 색상 픽셀을 형성한다. 화면의 각 개별 색상 요소인 서브 픽셀의 밀도가 달라지게 되면, 화면의 색상 표현 역시 크게 달라진다.

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.