gpt4 book ai didi

c++ - GTKMM:截屏 DrawingArea?

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:48 35 4
gpt4 key购买 nike

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

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

最佳答案

我不习惯 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 上下文。

关于c++ - GTKMM:截屏 DrawingArea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265773/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com