检测宽屏幕宽高比

时间:2014-02-25 07:02:36

标签: c aspect-ratio

此代码试图找出用户监视器大小的最佳窗口大小。为此,我试图检测用户监视器的宽高比。

我正在使用的这种方法适用于4:3,16:9,16:10的分辨率,但它因21 {9分辨率而失败(转到默认情况),因为2560 * 21 != 1920 * 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;
}

1 个答案:

答案 0 :(得分:0)

当前分辨率的宽度和高度不会告诉您有关显示器宽高比的信息。例如,3个不同尺寸的显示器(例如4:3,16:10和16:12)都可以使用1024 * 768。

要获得实际的宽高比,您需要来自显示器本身的信息。大多数显示器支持称为EDID(扩展显示识别数据)的东西,其中包括显示器的有效显示区域宽度和高度,单位为mm。

当然,您不希望从原始EDID数据本身中提取此信息 - 您需要一个提供最初从EDID获取的信息的API和/或库。我不知道你正在使用哪个操作系统;但如果有可用的库和/或API,也不会感到惊讶。如果多个显示器之类的东西让你感到复杂(例如我使用的是两个不同尺寸的显示器),也不要感到惊讶。