此代码试图找出用户监视器大小的最佳窗口大小。为此,我试图检测用户监视器的宽高比。
我正在使用的这种方法适用于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;
}
答案 0 :(得分:0)
当前分辨率的宽度和高度不会告诉您有关显示器宽高比的信息。例如,3个不同尺寸的显示器(例如4:3,16:10和16:12)都可以使用1024 * 768。
要获得实际的宽高比,您需要来自显示器本身的信息。大多数显示器支持称为EDID(扩展显示识别数据)的东西,其中包括显示器的有效显示区域宽度和高度,单位为mm。
当然,您不希望从原始EDID数据本身中提取此信息 - 您需要一个提供最初从EDID获取的信息的API和/或库。我不知道你正在使用哪个操作系统;但如果有可用的库和/或API,也不会感到惊讶。如果多个显示器之类的东西让你感到复杂(例如我使用的是两个不同尺寸的显示器),也不要感到惊讶。