GTKMM: сделать снимок экрана DrawingArea? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть область рисования, внутри которой я рисую несколько фигур или изображений, поэтому у меня есть обратный вызов для создания снимков экрана:

void CanvasToolBox::actionCanvasCamera()
{
    auto root = Gdk::Window::get_default_root_window();
    int height = root->get_height();
    int width = root->get_width();
    auto pixels = Gdk::Pixbuf::create(root, 0, 0, width, height);
    pixels->save("s.png", "png");
}

Этот код делает снимок экрана всего экрана. Но мне нужносделайте скриншот определенного окна Gtk :: DrawingArea в моем случае .. так что функции create нужен Gdk :: Window в качестве параметра.Есть ли способ сделать скриншот окна Gtk?Спасибо

1 Ответ

0 голосов
/ 11 сентября 2018

Я не привык к GTKmm (вместо этого я использую API C и Python), но с вашим примером это выглядит довольно просто.Вы просто хотите использовать Gtk::DrawingArea вместо корневого окна.Таким образом, вы ищете в документации Gdk::Window::get_default_root_window и обнаруживает, что он возвращает Gdk::Window.

Теперь вы должны найти, как получить Gdk::Window из Gtk::DrawingArea,Таким образом, вы переходите к документации Gtk::DrawingArea и ищете функцию, которая возвращает Gdk::Window, а затем обнаруживаете, что это Gtk::Widget::get_window, которая унаследована от Gtk::Widget,Кстати, вы можете предпочесть const версию, так как вы не изменяете окно, просто читаете его.

Затем вы можете заменить код, который получает корневые окна, вызовом, чтобы получить Gdk::Window виджетаВы заботитесь, и все готово.Если вы хотите пойти дальше, вместо использования Gdk::Pixbuf, может быть способ использовать контекст cairo.

...