2014-02-25 5 views
0

이 코드는 사용자 모니터 크기에 가장 적합한 창 크기를 찾으려고합니다. 이렇게하려면 사용자 모니터의 종횡비를 감지하려고합니다.와이드 화면 가로 세로 비율 감지

내가 사용하는이 방법은 4 : 3, 16 : 9, 16:10 해상도에서는 제대로 작동하지만 2560 * 21 != 1920 * 9이므로 21 : 9 해상도에서는 실패합니다 (기본 경우로 이동). 와이드 스크린 화면 비율에서 화면 비율을 올바르게 감지하려면 어떻게합니까?

dm.wdm.h는 폭과 현재 해상도의 현재 해상도

if(dm.h * 4 == dm.w * 3) { // 4:3 
    screen_width = 1024; 
    screen_height = 768; 
} else if(dm.h * 16 == dm.w * 9) { // 16:9 
    screen_width = 1366; 
    screen_height = 768; 
} else if(dm.h * 16 == dm.w * 10) { // 16:10 
    screen_width = 1440; 
    screen_height = 900; 
} else if(dm.h * 21 == dm.w * 9) { // 21:9 
    screen_width = 1920; 
    screen_height = 720; 
} else { 
    Printf("Unknown aspect ratio. Defaulting to 1024x768\n"); 
    screen_width = 1024; 
    screen_height = 768; 
} 
+2

더 많은 가능한 해결책이 있습니까? 예를 들어 1280x800은 어떻습니까? 또는 매우 일반적인 1920x1080? 또는 (불행히도 드물기도하다) 1920x1200? 또는 더 큰 해상도의 현대 27 또는 30 (또는 더 큰) 인치 디스플레이는 어떻습니까? –

+0

당신은 그 결의안이 이것으로 제대로 감지되지 않을 것이라는 것을 의미합니까? –

+1

해상도를 감지하기 위해 가로 세로 비율을 사용해서는 안됩니다. 대신 각 운영 체제에는 이미 실제 해상도와 지원되는 모든 해상도를 가져 오는 기능이 있습니다. 가로 세로 비율을 원한다면 일단 해상도를 얻으면 쉽게 계산할 수 있습니다. –

답변

0

폭과 높이의 높이입니다 당신에게 모니터 화면 비율에 대해 아무것도 알 수 없습니다. 예를 들어 크기가 다른 3 대의 모니터 (예 : 4 : 3, 16:10 및 16:12)는 모두 1024 * 768을 사용할 수 있습니다.

실제 화면 비율을 얻으려면 모니터 자체의 정보가 필요합니다. 대부분의 모니터는 모니터의 활성 디스플레이 영역 너비와 높이 (mm)를 포함하는 EDID (확장 된 디스플레이 식별 데이터)라는 것을 지원합니다.

원시 EDID 데이터 자체에서이 정보를 추출하고 싶지는 않을 것입니다. 원래 EDID에서 얻은 정보를 제공하는 API 및/또는 라이브러리가 필요합니다. 어떤 OS를 사용하고 있는지 알 수 없습니다. 라이브러리 및/또는 API를 사용할 수 있다면 놀라지 않을 것입니다. 또한 여러 모니터와 같은 것들이 당신을 복잡하게 만드는 경우 (예 : 크기가 다른 2 개의 모니터를 사용하는 경우) 놀라지 마십시오.

관련 문제