Skip to content

Latest commit

 

History

History
131 lines (96 loc) · 2.92 KB

README-zh_CN.md

File metadata and controls

131 lines (96 loc) · 2.92 KB

XCap

English | 简体中文

XCap 是一个使用 Rust 编写的跨平台的屏幕捕获库,它支持 Linux(X11,Wayland)、MacOS 与 Windows。XCap 支持截图与视频录制(待实现)。

功能

  • 跨平台: 支持 Linux(X11,Wayland)、MacOS 与 Windows。
  • 支持多种截图模式: 可以对屏幕与窗口进行截图。
  • 支持视频录制:支持对屏幕或窗口进行录制(待实现)。

实现状态

功能 Linux(X11) Linux(Wayland) MacOS Windows
屏幕截图
窗口截图
屏幕录制 🛠️ 🛠️ 🛠️ 🛠️
窗口录制 🛠️ 🛠️ 🛠️ 🛠️
  • ✅: 功能可用
  • ⛔: 功能可用,但在一些特殊场景下未完全支持
  • 🛠️: 待开发

例子

  • 屏幕截图
use std::time::Instant;
use xcap::Monitor;

fn normalized(filename: &str) -> String {
    filename
        .replace("|", "")
        .replace("\\", "")
        .replace(":", "")
        .replace("/", "")
}

fn main() {
    let start = Instant::now();
    let monitors = Monitor::all().unwrap();

    for monitor in monitors {
        let image = monitor.capture_image().unwrap();

        image
            .save(format!("target/monitor-{}.png", normalized(monitor.name())))
            .unwrap();
    }

    println!("运行耗时: {:?}", start.elapsed());
}
  • 窗口截图
use std::time::Instant;
use xcap::Window;

fn normalized(filename: &str) -> String {
    filename
        .replace("|", "")
        .replace("\\", "")
        .replace(":", "")
        .replace("/", "")
}

fn main() {
    let start = Instant::now();
    let windows = Window::all().unwrap();

    let mut i = 0;

    for window in windows {
        // 最小化的窗口不能截屏
        if window.is_minimized() {
            continue;
        }

        println!(
            "Window: {:?} {:?} {:?}",
            window.title(),
            (window.x(), window.y(), window.width(), window.height()),
            (window.is_minimized(), window.is_maximized())
        );

        let image = window.capture_image().unwrap();
        image
            .save(format!(
                "target/window-{}-{}.png",
                i,
                normalized(window.title())
            ))
            .unwrap();

        i += 1;
    }

    println!("运行耗时: {:?}", start.elapsed());
}

Linux 系统要求

在 Linux 上,需要安装 libxcb, libxrandrdbus.

Debian/Ubuntu:

apt-get install libxcb1 libxrandr2 libdbus-1-3

Alpine:

apk add libxcb libxrandr dbus

ArchLinux:

pacman -S libxcb libxrandr dbus

License

本项目采用 Apache 许可证。详情请查看 LICENSE 文件。