美文网首页
Linux C 实现屏幕截图

Linux C 实现屏幕截图

作者: 孙庚辛 | 来源:发表于2021-11-30 06:38 被阅读0次

首先安装 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 C 实现屏幕截图

    首先安装 libimlib2-dev 软件包, 然后安装 giblib 最后编写源码文件 Makefile、scr...

  • Vs编写c# 实现屏幕截图

    实现代码 如下 using System; using System.Drawing; using System....

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

    使用 gtk 截图后不需要保存图片文件,直接通过内存中的数据进行显示。首先安装 gtk : 然后编写应用程序: ...

  • JavaScript 实现屏幕截图

    方法一 需要安装file-saver,html2canvas插件 对于地图截图也可以 这个方法的问题是标记标绘可以...

  • Python实现屏幕截图

    之前使用Python构建了一个图片转文字小工具,但是使用的是使用系统自带的截图工具然后监听目录变化来实现的。接下来...

  • 用C++实现仿QQ屏幕截图功能,以后不登QQ也能截图!

    用C++实现的仿QQ屏幕静态截图的功能,可在屏幕的任何地方抓图或者截屏,从功能上来说和QQ的截图功能几乎没什么两样...

  • CANVAS

    知乎网页上屏幕截图功能的实现 介绍了知乎和 google keep 所提供的屏幕截图反馈功能,以及网页中用 js ...

  • 屏幕截图

  • 屏幕截图

    方法1 save_screenshot() #该方法直接保存当前屏幕截图到当前脚本所在文件位置。 driver.s...

  • 屏幕截图

    Activity界面区域划分 如图:最大的红色区域是屏幕界面,绿色次大区域我们称之为“应用界面区域”,蓝色的区域我...

网友评论

      本文标题:Linux C 实现屏幕截图

      本文链接:https://www.haomeiwen.com/subject/yrbrxrtx.html