GDK屏幕vs显示器vs显示器?

Noitidart:

我目前正在开发一个小型应用,以对所有物理监视器进行截图。尽管在所有术语之间我都很困惑。我明白:

  1. 我们可以有多个显示器
  2. 每个显示器可以具有多个监视器,这些监视器称为屏幕?

我很困惑,因为我在想屏幕可能是台式机吗?我的应用程序不应该与不可见的桌面无关,只需对所有监视器上当前的屏幕截图进行截图即可。

我的理解正确吗?

到目前为止,这是我的GDK伪代码:

            var rezArr = [];
            gdk_display_manager_list_displays

            for (var d=0; d<displays.length; d++) {

                var nScreens = gdk_display_get_n_screens(displays[d]);

                for (var s=0; s<nScreens; s++) {
                    var cScreen = gdk_display_get_screen(displays[d], s);
                    // var nMonitors = gdk_screen_get_n_monitors(cScreen);
                    // for (var m=0; m<nMonitors; m++) {
                        // var gdkRect = GdkRectangle();
                        // gdk_screen_get_monitor_geometry(cScreen, m, gdkRect);
                    // }

                    var cRootWin = gdk_screen_get_root_window(cScreen);
                    var cWidth = gdk_screen_get_width(cScreen);
                    var cHeight = gdk_screen_get_height(cScreen);
                    var cColormap = GdkColormap();
                    gdk_screen_set_default_colormap(cScreen, cColormap);
                    var cPixbuf = gdk_pixbuf_new(COLORSPACE_RGB, false, 8, cWidth, cScreen);
                    var cDrawable = ctypes.cast(cScreen, self.TYPE.GdkDrawable.ptr);
                    var src_x = 0; // im guessing, i could not figure out screen geometry, i could only get its width and height
                    var src_y = 0; // im guessing, i could not figure out screen geometry, i could only get its width and height
                    var dest_x = 0;
                    var dest_y = 0;
                    gdk_pixbuf_get_from_drawable(cPixbuf, cDrawable, cColormap, src_x, src_y, dest_x, dest_y, cWidth, cHeight);
                    rezArr.push(
                        {
                            // i dont know how to get x1, y1 yet. but x2 and y2 is just x1 + cWidth and y1 + cHeight
                            // monitorTopLeftX: x1,
                            // monitorTopLetY: y1,
                            // monitorBottomRightX: x2,
                            // monitorBottomRightY: y2,
                            pixbuf: cPixbuf
                        }
                    );
                }
            }

您可以看到我对显示器感到困惑,因此只需将其注释掉即可。

非常感谢

bas

GdkDisplay是一个对象,它表示与显示服务器(如X11服务器)或Wayland合成器的单一连接。应用程序可以具有多个连接,但是GDK资源与GdkDisplay创建它们的每个实例相关联

GdkScreen是X11具有Screens 的“屏幕” 它是一个虚拟实体,可以匹配多个监视器或监视器的一部分。现代GDK / GTK代码假定GdkDisplay之间为1:1匹配GdkScreen

GDK没有代表监视器的对象;它具有API,GdkDisplayGdkScreen需要一个监视器索引来显示类似显示几何的内容。

[更新]从Gtk + 3.22开始,有一个新GdkMonitor类表示监视器,它可用于获取有关监视器几何形状等的信息。[/更新]

从窗口管理器的角度来看,基本上所有X11 WM都使用覆盖所有监视器的单个屏幕,因此您实际上不需要进行遍历。

看来您正在尝试编写代码以捕获整个屏幕的屏幕截图。最简单的解决方案是获取默认值的根窗口GdkScreen并使用gdk_pixbuf_get_from_window()这将为您完成所有工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章