GTK/GDK 截取所有显示器的完整屏幕截图的算法

GTK/GDK Algorithm to take full screenshots of all monitors

我对整个 GTK 游戏还很陌生,想创建一个算法来截取所有显示器的屏幕截图。

我的想法是这样的:

  1. gdk_display_manager_list_displays
  2. 每个显示器可以有多个屏幕(屏幕意味着显示器?)所以使用 gdk_display_get_n_screens1
  3. 获取每个显示器的显示器
  4. 2
  5. 获取所有屏幕的根 gtk window
  6. 为每个根 gtk window 从 3gdk_pixbuf_new
  7. 的每个屏幕创建新的 Pixbuf
  8. gdk_pixbuf_get_from_drawable 填充 4 中的每个像素缓冲区 gdk_pixbuf_get_from_drawable 来自 3 的每个相应屏幕 2 来自 2 的每个相应显示器1(对于 pixbuf 的每个参数,可能需要 gdk_drawable_get_sizegdk_window_get_origin
  9. gdk_pixbuf_get_pixels 每个 pixbuf

这是可行的解决方案吗?

如果您确定 cRootWin 不是 NULL 并且 cWidthcHeight 大于 0,那么您应该检查提到的一些其他问题 by the doc

一个大胆的猜测是您的程序没有足够的内存来存储像素图(通常为 6 Mb)。我会尝试分配 12 Mb 只是为了看看是否是这种情况。