GTKMM:拍摄DrawingArea的屏幕截图?

问题描述 投票:1回答:1

我有一个绘图区域,我在里面绘制一些数字或图像,所以我有这个回调截取屏幕截图:

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特定窗口的截图?谢谢

c++ gtk gtkmm
1个回答
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,并且您已完成。如果你想进一步,而不是使用Gdk::Pixbuf,可能有一种方法来使用cairo上下文。

© www.soinside.com 2019 - 2024. All rights reserved.