这段代码试图计算出用户显示器大小的最佳窗口大小。为此,我尝试检测用户监视器的纵横比。
我使用的这个方法在4:3,16:9,16:10分辨率下工作正常,但在21:9分辨率下失败(转到默认情况下),因为2560 * 21 != 1920 * 9
。如何在宽屏幕宽高比上正确检测宽高比?
dm.w
和dm.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;
}
发布于 2014-02-25 16:22:14
当前分辨率的宽度和高度与显示器的纵横比无关。例如,3个不同大小的显示器(例如4:3、16:10和16:12)都可以使用1024*768。
要获得实际的纵横比,您需要来自监视器本身的信息。大多数显示器都支持EDID (扩展显示识别数据),它包括显示器的活动显示区域、宽度和高度,单位为毫米。
当然,您不希望从原始EDID数据本身提取此信息-您需要一个API和/或库来提供最初从EDID获得的信息。我不知道您使用的是哪种操作系统;但如果有可用的库和/或API,我也不会感到惊讶。如果像多个显示器这样的东西让你的事情变得复杂,也不要感到惊讶(例如,我使用的是两个不同大小的显示器)。
https://stackoverflow.com/questions/22006939
复制相似问题