Linux C 实现屏幕截图

简介: Linux C 实现屏幕截图

首先安装 libimlib2-dev 软件包,

# sudo apt install libimlib2-dev


然后安装 giblib

# wget http://pkgs.[Fedora](http://www.linuxidc.com/topicnews.aspx?tid=5 "Fedora")project.org/repo/pkgs/giblib/giblib-1.2.4.tar.gz/c810ef5389baf24882a1caca2954385e/giblib-1.2.4.tar.gz 
# tar zxvf  giblib-1.2.4.tar.gz
# cd giblib-1.2.4
# ./configure
# make
# sudo make install


最后编写源码文件 Makefile、screen.c 和 screen.h ,并执行 make 命令编译。


Makefile:

CC = gcc
CFLAGS = -Wall -Werror -Wcast-align -g
LDFLAGS =
SCREENOBJECT = screen.o
GIBLIBCFLAGS = `giblib-config --cflags`
GIBLIBLIBS = `giblib-config --libs`
all: screen
screen: $(SCREENOBJECT)
    $(CC) $(LDFLAGS) $(GIBLIBLIBS) $(SCREENOBJECT) -lX11 -o $@
screen.o: screen.c screen.h
    $(CC) $(CFLAGS) $(GIBLIBCFLAGS) -c $<
clean:
    rm -f screen *~ *.o a.out
clean-media:
    rm -f *~ *.jpeg
.PHONY: all clean


screen.c:


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <giblib/giblib.h>
#include "screen.h"
void
screen_init(struct screen *screen)
{
  screen->display = XOpenDisplay(NULL);
  if (!screen->display) {
    perror("XOpenDisplay");
    exit(EXIT_FAILURE);
  }
  screen->screen = ScreenOfDisplay(screen->display,
                  DefaultScreen(screen->display));
  screen->visual = DefaultVisual(screen->display,
                DefaultScreen(screen->display));
  screen->colormap = DefaultColormap(screen->display,
                DefaultScreen(screen->display));
  screen->root = RootWindow(screen->display,
                DefaultScreen(screen->display));
  imlib_context_set_display(screen->display);
  imlib_context_set_visual(screen->visual);
  imlib_context_set_colormap(screen->colormap);
}
int
main(int argc, char *argv[])
{
  struct screen screen;
  Imlib_Image image;
  screen_init(&screen);
  image = gib_imlib_create_image_from_drawable(screen.root,
                           0,
                           0,
                           0,
                           screen.screen->width,
                           screen.screen->height,
                           1);
  imlib_context_set_image(image);
  imlib_image_set_format("jpeg");
  imlib_save_image("screen.jpeg");
  imlib_free_image();
  exit(EXIT_SUCCESS);
}


screen.h:

#ifndef SCREEN_H
#define SCREEN_H
#include <X11/Xlib.h>
struct screen {
  Display *display;
  Screen *screen;
  Visual *visual;
  Colormap colormap;
  Window root;
};
void screen_init(struct screen *screen);
#endif



目录
相关文章
|
Linux 网络安全 开发工具
校外网络连接校园网内的linux服务器方法(使用frp实现内网穿透)
平常在校园里连接校内实验室的linux服务器可以直接使用ssh直接链接私有ip地址,一旦本地移动到了校园网外部(如:使用手机流量wifi,或着暑假回家使用家庭wifi)便无法在使用ssh连接校内的服务器。本文提供一个实现校外也能访问校内服务器的方法
4398 0
校外网络连接校园网内的linux服务器方法(使用frp实现内网穿透)
|
存储 网络协议 Linux
把Linux服务器做成一个下载器,实现远程下载
把Linux服务器做成一个下载器,实现远程下载
把Linux服务器做成一个下载器,实现远程下载
|
关系型数据库 MySQL Linux
Linux下C语言实现MySQL操作——连接、查询、插入与客户端打造
Linux下C语言实现MySQL操作——连接、查询、插入与客户端打造
459 0
Linux下C语言实现MySQL操作——连接、查询、插入与客户端打造
|
存储 Linux
华为工程师发布最新补丁,实现对 AArch64 硬件的 Linux 镜像内存支持
早在 2015 年,Linux 内核就已支持 x86/x86_64 的 UEFI 镜像内存功能,而对于华为来说,为 AArch64 添加该功能也是他们一直在努力的事情。4 月 14 日,华为工程师 Wupeng Ma 发布了最新补丁集,实现了对 AArch64 硬件的这种 Linux 镜像内存支持。
242 0
华为工程师发布最新补丁,实现对 AArch64 硬件的 Linux 镜像内存支持
Daz
|
IDE Unix Linux
|
Java Linux
想要在Linux中只显示隐藏文件,用对ls就可以实现
在使用Linux的过程中,如何只显示隐藏文件呢? 其实非常简单,只需要用到`ls`就可以实现。
298 0
想要在Linux中只显示隐藏文件,用对ls就可以实现
Daz
|
IDE Unix Linux
GNU/Linux下实现一个简易echo服务器
本文将详细讲解一个简易echo服务器的实现
Daz
286 0
GNU/Linux下实现一个简易echo服务器
|
Linux
基于XShell实现Win与Linux文件传输(替换XFtp等)
基于XShell实现Win与Linux文件传输(替换XFtp等)
327 0
基于XShell实现Win与Linux文件传输(替换XFtp等)
|
安全 Oracle 关系型数据库
Linux——了解目录结构( / )、实现远程操作(Xshell、Xftp)
Linux——了解目录结构( / )、实现远程操作(Xshell、Xftp)
Linux——了解目录结构( / )、实现远程操作(Xshell、Xftp)
|
Ubuntu Linux Windows
linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享
linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享
linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享