GTKMM:对DrawingArea进行截屏吗?

时间:2018-09-10 21:32:37

标签: c++ gtk gtkmm

我有一个绘图区域,可以在其中绘制一些图形或图像,因此我可以使用此回调来截取屏幕截图:

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 :(得分:0)

我不习惯GTKmm(我改用C和Python API),但是在您的示例中,这看起来非常简单。您只想使用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,然后就完成了。如果您想走得更远,可以使用cairo上下文而不是使用Gdk::Pixbuf