我发现这个code可以在Ted Mielczarek的网站上截取屏幕截图。
ListView lv = (ListView) findViewById(R.id.my_list);
registerForContextMenu(lv);
我按照描述进行了编译,看起来很有效,因为它生成的图像尺寸正确,但屏幕截图完全是黑色的。
这在运行Wayland的系统上似乎是common issue(我正在使用Wayland运行Archlinux),所以我的问题是:
需要对此代码进行哪些修改才能在Wayland(和X)上生成适当的屏幕截图?
答案 0 :(得分:0)
我遇到了类似的问题。
我用Xlib截屏,但是这个方法在Wayland上不起作用。每次跑到xgetimage都报错。查了资料,发现Wayland不允许这样的截图。但是,通过这种方式,我仍然可以获得正确的屏幕尺寸。
现在我使用DBUS调用系统的会话总线来截图,这是我在阅读Gnome截图源码中学到的。
这是一个简单的总结代码:
method_name = "Screenshot";
method_params = g_variant_new ("(bbs)",
TRUE,
FALSE, /* flash */
filename);
connection = g_application_get_dbus_connection (g_application_get_default ());
g_dbus_connection_call_sync (connection,
"org.gnome.Shell.Screenshot",
"/org/gnome/Shell/Screenshot",
"org.gnome.Shell.Screenshot",
method_name,
method_params,
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
文档链接在这里: https://developer.gnome.org/references
Gnome 的 GitHub 截图在这里: https://github.com/GNOME/gnome-screenshot