如何在GDK中以像素而非毫米为单位获取屏幕尺寸?
获取GdkMonitor像素尺寸的正确方式
你其实没漏掉文档的核心要点,只是没注意到GdkMonitor提供了直接获取像素尺寸的方法——gdk_monitor_get_geometry()。这个函数会返回一个GdkRectangle结构体,里面的width和height就是当前显示器的像素宽高。
修正后的代码示例
GdkDisplay *display = gdk_display_get_default(); GdkWindow *root_window = gdk_get_default_root_window(); GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, root_window); if (monitor != NULL) { GdkRectangle geometry; gdk_monitor_get_geometry(monitor, &geometry); // geometry.width 和 geometry.height 即为像素单位的屏幕尺寸 g_print("屏幕像素宽度: %d, 高度: %d\n", geometry.width, geometry.height); }
关于毫米转像素的补充(若确有需求)
如果某些场景下必须从毫米单位转换为像素,你可以结合显示器的像素尺寸与物理尺寸计算换算比例:
// 假设已获取到monitor和geometry结构体 gint width_mm = gdk_monitor_get_width_mm(monitor); gint height_mm = gdk_monitor_get_height_mm(monitor); // 计算每毫米对应的像素数 double px_per_mm_width = (double)geometry.width / width_mm; double px_per_mm_height = (double)geometry.height / height_mm; // 示例:将50毫米转换为像素 gint converted_px_width = (gint)(50 * px_per_mm_width); gint converted_px_height = (gint)(50 * px_per_mm_height);
不过更推荐直接使用gdk_monitor_get_geometry()获取像素尺寸,这是GDK 3.22+官方推荐的「每显示器信息」获取方式,比单位转换更准确高效。
内容的提问来源于stack exchange,提问作者Ueda Takeyuki
相关产品推荐
相关产品推荐

