我有一个绘图区域,可以在其中绘制一些图形或图像,因此我可以使用此回调来截取屏幕截图:
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特定窗口的屏幕截图吗?
谢谢
答案 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
。