Gtk 屏幕截图并显示(Linux C语言)

简介: Gtk 屏幕截图并显示(Linux C语言)

使用 gtk 截图后不需要保存图片文件,直接通过内存中的数据进行显示。


首先安装 gtk  :

sudo apt install gtk+-2.0
sudo apt install libgtk2.0*


然后编写应用程序:


#include <gtk/gtk.h>
void destroy(void) {
  gtk_main_quit();
}
GdkPixbuf * get_screenshot(){
    GdkPixbuf *screenshot;
    GdkWindow *root_window;
    gint x_orig, y_orig;
    gint width, height;
    root_window = gdk_get_default_root_window ();
    gdk_drawable_get_size (root_window, &width, &height);      
    gdk_window_get_origin (root_window, &x_orig, &y_orig);
    screenshot = gdk_pixbuf_get_from_drawable (NULL, root_window, NULL,
                                           x_orig, y_orig, 0, 0, width, height);
    return screenshot;
}
int main (int argc, char** argv) {
  GtkWidget* window;
  GtkWidget* image;
  GdkPixbuf * pixbuf;
  gtk_init (&argc, &argv);
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//  image  = gtk_image_new_from_file(argv[1]);
  pixbuf = get_screenshot();
  image = gtk_image_new_from_pixbuf(pixbuf);
  gtk_signal_connect(GTK_OBJECT (window), "destroy",
             GTK_SIGNAL_FUNC (destroy), NULL);
  gtk_container_add(GTK_CONTAINER (window), image);
  gtk_window_set_resizable(window, TRUE);
  gtk_widget_set_size_request(window, 800, 600);
  gtk_widget_show_all(window);
  gtk_main();
  return 0;
}


使用以下命令进行编译:

gcc -Wall  displaytest.c  -o  displaytest  `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk



目录
相关文章
|
2月前
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。
|
4月前
|
Linux C语言 Windows
C语言文件编程-Linux环境下运行
本文介绍了在Linux环境下使用C语言进行文件编程时的两种主要接口:C标准库函数与Linux系统调用。C标准库提供了`fopen`, `fread`, `fwrite`, 和 `fclose`等函数,适用于普通文件操作;而Linux系统调用如`open`, `read`, `write`, 和 `close`则更适合处理设备文件,同时也可用于普通文件。这两种方法的主要区别在于前者使用文件指针,后者使用文件描述符。文章还给出了两个示例程序:一个使用C标准库函数实现文件复制,另一个则使用Linux系统调用完成相同任务。
|
5月前
|
Linux API C语言
C语言读写BMP文件-EasyBmp【 linux 平台】
**EasyBmp** 是一个49KB的轻量级C++图像处理库,专注于BMP格式,提供简单易用的API。它的特点是小巧、开源、易于理解和高度定制。通过示例代码展示了如何轻松读取、缩放和保存BMP图像。适合需要高效处理BMP图像的开发者。
|
6月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
67 5
|
6月前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
54 3
|
6月前
|
存储 Shell Linux
操作系统实战(一)(linux+C语言)
本篇文章重点在于利用linux系统的完成操作系统的实验,巩固课堂知识
|
6月前
|
Linux API C语言
lua 如何在嵌入式Linux中与c语言结合
lua 如何在嵌入式Linux中与c语言结合
90 1
|
6月前
|
小程序 Linux API
Linux用C语言模拟‘ls‘命令
Linux用C语言模拟‘ls‘命令
40 1
|
6月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
55 0
Linux indent命令 (格式化C语言源代码的程序)
|
6月前
|
Linux C语言
【Linux】C语言动态库和静态库的制作和使用
【Linux】C语言动态库和静态库的制作和使用