2021-07-29 13:33:26 +08:00
|
|
|
Derived from https://github.com/quadrupleslap/scrap
|
|
|
|
|
2021-03-29 15:59:14 +08:00
|
|
|
# scrap
|
|
|
|
|
|
|
|
Scrap records your screen! At least it does if you're on Windows, macOS, or Linux.
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[dependencies]
|
|
|
|
scrap = "0.5"
|
|
|
|
```
|
|
|
|
|
|
|
|
Its API is as simple as it gets!
|
|
|
|
|
|
|
|
```rust
|
|
|
|
struct Display; /// A screen.
|
|
|
|
struct Frame; /// An array of the pixels that were on-screen.
|
|
|
|
struct Capturer; /// A recording instance.
|
|
|
|
|
|
|
|
impl Capturer {
|
|
|
|
/// Begin recording.
|
|
|
|
pub fn new(display: Display) -> io::Result<Capturer>;
|
|
|
|
|
|
|
|
/// Try to get a frame.
|
|
|
|
/// Returns WouldBlock if it's not ready yet.
|
|
|
|
pub fn frame<'a>(&'a mut self) -> io::Result<Frame<'a>>;
|
|
|
|
|
|
|
|
pub fn width(&self) -> usize;
|
|
|
|
pub fn height(&self) -> usize;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Display {
|
|
|
|
/// The primary screen.
|
|
|
|
pub fn primary() -> io::Result<Display>;
|
|
|
|
|
|
|
|
/// All the screens.
|
|
|
|
pub fn all() -> io::Result<Vec<Display>>;
|
|
|
|
|
|
|
|
pub fn width(&self) -> usize;
|
|
|
|
pub fn height(&self) -> usize;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> ops::Deref for Frame<'a> {
|
|
|
|
/// A frame is just an array of bytes.
|
|
|
|
type Target = [u8];
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## The Frame Format
|
|
|
|
|
|
|
|
- The frame format is guaranteed to be **packed BGRA**.
|
|
|
|
- The width and height are guaranteed to remain constant.
|
|
|
|
- The stride might be greater than the width, and it may also vary between frames.
|
|
|
|
|
|
|
|
## System Requirements
|
|
|
|
|
|
|
|
OS | Minimum Requirements
|
|
|
|
--------|---------------------
|
|
|
|
macOS | macOS 10.8
|
|
|
|
Linux | XCB + SHM + RandR
|
|
|
|
Windows | DirectX 11.1
|