linux – GDK Screen vs Monitor vs Display?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – GDK Screen vs Monitor vs Display?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2421字,纯文字阅读大概需要4分钟。
内容图文
我正在开发一个小应用程序来截取所有物理监视器的截图.尽管在所有术语之间我都很困惑.我明白:
>我们可以有多个显示器
>每个显示器可以有多个显示器,称为屏幕?
我很困惑,因为我想也许屏幕是台式机?我的应用程序不关心不可见的桌面,只是截取当前所有显示器上的内容.
我的理解是否正确?
到目前为止,这是我的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
}
);
}
}
你可以看到我与显示器混淆,然后只是评论它.
非常感谢
解决方法:
GdkDisplay是一个对象,表示与显示服务器的单个连接,如X11服务器或Wayland合成器.应用程序可以有多个连接,但GDK资源与创建它们的每个GdkDisplay实例相关联.
GdkScreen是一个“屏幕”,就像X11有屏幕一样;它是一个虚拟实体,可以匹配多个监视器或监视器的一部分.现代GDK / GTK代码假定GdkDisplay和GdkScreen之间的比例为1:1.
GDK没有代表监视器的对象;它在GdkDisplay和GdkScreen上有API,它为显示几何图形等内容提供监视器索引.
[更新]从Gtk 3.22开始,有一个新的GdkMonitor类代表一个监视器,可用于获取有关监视器几何的信息等. [/更新]
从窗口管理器的角度来看,基本上所有X11 WM都使用覆盖所有监视器的单个屏幕,因此您不需要迭代它们.
看来你正在尝试编写代码来获取整个屏幕的截图.最简单的解决方案是获取默认GdkScreen的根窗口并使用gdk_pixbuf_get_from_window();这将为您完成所有工作.
内容总结
以上是互联网集市为您收集整理的linux – GDK Screen vs Monitor vs Display?全部内容,希望文章能够帮你解决linux – GDK Screen vs Monitor vs Display?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。