2015-05-09 3 views
2

Я довольно новичок во всей игре GTK и хочу создать алгоритм для снятия снимков экрана всех мониторов.GTK/GDK Алгоритм для полного скриншота всех мониторов

я что-то вдоль этих линий мышления:

  1. gdk_display_manager_list_displays
  2. каждый дисплей может иметь несколько экранов (экраны означает мониторы?), Так что используйте gdk_display_get_n_screens, чтобы получить мониторы на дисплей от 1
  3. получить корневой GTK окно всех экранов от 2
  4. создать новый Pixbuf для каждого окна gtk для каждого окна от 3 с gdk_pixbuf_new
  5. заполнить каждую pixbuf из 4 с gdk_pixbuf_get_from_drawable для каждого соответствующего корневого окна из 3 для каждого соответствующего экрана от 2 для каждого соответствующего дисплея от 1 (возможно, потребуется gdk_drawable_get_size и gdk_window_get_origin для каждого для арг, чтобы pixbuf)
  6. gdk_pixbuf_get_pixels для каждого pixbuf

Является ли это приемлемым решением?

+1

Я думаю, что он может работать. Вот ссылка: http://git.xfce.org/apps/xfce4-screenshooter/tree/lib/screenshooter-capture.c#n325 – ntd

+0

Спасибо @ntd! Я написал эту версию здесь в js-ctypes: https://github.com/Noitidart/NativeShot/blob/gdk-experimental/modules/workers/MainWorker.js#L439-506, но ее получение null, когда я пытаюсь использовать gdk3 метод 'gdk_pixbuf_get_from_window' и его сбой, когда я пытаюсь использовать gdk2 метод' gdk_pixbuf_get_from_drawable' :( – Noitidart

+1

Мой комментарий слишком длинный, поэтому я отправил ответ. Я думаю, что решение будет включать в себя множество проб и ошибок на вашей стороне. – ntd

ответ

1

Если вы уверены, что cRootWin не NULL и cWidth и cHeight больше, чем 0, то вы должны проверить некоторые дополнительные проблемы упоминалось by the doc.

Удивительно, что вашей программе недостаточно памяти для хранения pixmap (обычно 6 Мб). Я бы постарался выделить 12 Мб, чтобы убедиться, что это так.

+0

Thanks @ntd Это поможет вам обновить вас на прогрессах! :) – Noitidart