13 个版本
新增 0.0.13 | 2024 年 8 月 25 日 |
---|---|
0.0.12 | 2024 年 8 月 20 日 |
0.0.10 | 2024 年 5 月 26 日 |
0.0.9 | 2024 年 4 月 28 日 |
0.0.3 | 2024 年 1 月 30 日 |
#91 在 GUI
每月下载量 3,590
在 3 crates 中使用
86KB
2K SLoC
XCap
英语 | 简体中文
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
、libxrandr
和 dbus
。
Debian/Ubuntu
apt-get install libxcb1 libxrandr2 libdbus-1-3
Alpine
apk add libxcb libxrandr dbus
ArchLinux
pacman -S libxcb libxrandr dbus
许可证
本项目采用 Apache 许可证。有关详细信息,请参阅 LICENSE 文件。
依赖关系
~3–41MB
~635K SLoC