Yatogami丶 2021-07-07 10:08 采纳率: 33.3%
浏览 229
已采纳

Linux上如何不用第三方库实现截图!!(C/C++)

最近要做的项目是要求不用第三方库的情况下使用原生C实现linux上的截图,本人利用framebuffer做出了一个截图工具,但是fb里的内容截图出来的是字符界面,并不是Linux上的GUI界面。
读了读一些开源工具,比如flameshot或是gnome,他们也都是用的QT或是GTK,没法参考。
大神们有什么好主意吗,谢谢谢!!!

  • 写回答

1条回答 默认 最新

  • include_iostream_ 2021-07-07 10:26
    关注

    Linux原生不存在GUI,从一开始,它的核心就是CLI。因此,想从Linux核心库找图形功能是不可能做到的,因为Linux核心功能压根不包含图形功能。你所看到的图形界面是Gnome等桌面管理器封装的,底层是X11或Wayland等协议的实现,例如xorg,严格而言这些都是第三方库,不属于Linux核心。当然,如果你们的需求认为X11也属于核心库,那也可以做到。
    以Ubuntu为例,其过去的发行版中,图形界面用的是X11协议,我记得默认用的X11服务器应该是xorg,以后可能要改wayland。再次强调,任何Linux的图形界面都是通过X11或Wayland这样的第三方协议实现的,所以需要服务器,它们不是Linux内核的核心部分。我个人没有做过Wayland的截屏,而对于X11,StackOverflow上可以找到具体的教程,比如这个:https://stackoverflow.com/questions/24988164/c-fast-screenshots-in-linux-for-use-with-opencv
    (这是检索Linux截屏得到的结果,但实际上,尽管很多人默认Linux使用X11协议,但并非所有桌面管理器都真的使用X11协议。)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测