【问题标题】:GTKMM: Take a screen shot of an DrawingArea?GTKMM:截取一个绘图区的屏幕截图?
【发布时间】:2019-02-15 08:37:30
【问题描述】:

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

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】:

    我不习惯 GTKmm(我使用 C 和 Python API),但是对于您的示例,这看起来很简单。您只想使用您的Gtk::DrawingArea 而不是根窗口。于是你在Gdk::Window::get_default_root_window的文档中搜索,发现它返回了一个Gdk::Window

    现在您必须找到如何从Gtk::DrawingArea 中获取Gdk::Window。所以你去Gtk::DrawingArea的文档,搜索一个返回Gdk::Window的函数,然后发现这是Gtk::Widget::get_window,继承自Gtk::Widget。顺便说一句,您可能更喜欢 const 版本,因为您不修改窗口,只需阅读即可。

    然后,您可以将获取根窗口的代码替换为调用以获取您关心的小部件的Gdk::Window,这样就完成了。如果你想更进一步,而不是使用Gdk::Pixbuf,可能有一种方法可以使用 cairo 上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多