-
-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
137 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# XCap | ||
|
||
[English](README.md) | 简体中文 | ||
|
||
XCap 是一个使用 Rust 编写的跨平台的屏幕捕获库,它支持 Linux(X11,Wayland)、MacOS 与 Windows。XCap 支持截图与视频录制(待实现)。 | ||
|
||
## 功能 | ||
|
||
- 跨平台: 支持 Linux(X11,Wayland)、MacOS 与 Windows。 | ||
- 支持多种截图模式: 可以对屏幕与窗口进行截图。 | ||
- 支持视频录制:支持对屏幕或窗口进行录制(待实现)。 | ||
|
||
## 例子 | ||
|
||
- 屏幕截图 | ||
|
||
```rust | ||
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()); | ||
} | ||
``` | ||
|
||
- 窗口截图 | ||
|
||
```rust | ||
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: | ||
|
||
```sh | ||
apt-get install libxcb1 libxrandr2 libdbus-1-3 | ||
``` | ||
|
||
Alpine: | ||
|
||
```sh | ||
apk add libxcb libxrandr dbus | ||
``` | ||
|
||
ArchLinux: | ||
|
||
```sh | ||
pacman -S libxcb libxrandr dbus | ||
``` | ||
|
||
## License | ||
|
||
本项目采用 Apache 许可证。详情请查看 [LICENSE](./LICENSE) 文件。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters