- Published on
screenshotsで画面全体を撮影する #Rust
- Authors

- Name
- Shou Arisaka / 有坂翔
この記事では、Rustでスクリーンショットを撮影する方法を紹介します。 画面全体を撮影し、指定のフォルダに画像を保存するまでを行います。
Rustでスクリーンショットを撮影するには、screenshots - crates.io: Rust Package Registryというcrateを使うことが一般的です。
Rustでスクリーンショットを撮影する
まず、Cargo.tomlに以下を追加します。 これにより、screenshotsというcrateを使うことができるようになります。
screenshots = "0.8.6"
全体のコードは以下のようになります。 これは、screenshot()という関数を定義し、その中でスクリーンショットを撮影しています。
use screenshots::Screen;
use std::time::Instant;
// screenshot(dest) -> void
fn screenshot(dest: &str) {
let start = Instant::now();
let screens = Screen::all().unwrap();
for screen in screens {
println!("capturer {screen:?}");
let mut image = screen.capture().unwrap();
image
.save(format!("{}", dest))
.unwrap();
}
println!("screenshot took {}ms", start.elapsed().as_millis());
}
この関数の実行フローは以下のようになります。
use screenshots::Screen;:screenshotsというcrateのScreenという構造体を使えるようにするuse std::time::Instant;:stdのtimeのInstantという構造体を使えるようにするfn screenshot(dest: &str) {:screenshotという関数を定義する。引数はdestという文字列型let start = Instant::now();:startという変数に、現在時刻を代入するlet screens = Screen::all().unwrap();:screensという変数に、全てのスクリーンを代入するfor screen in screens {:screensの中身をscreenという変数に代入し、ループを回すlet mut image = screen.capture().unwrap();:screenのスクリーンショットを撮影し、imageという変数に代入するimage.save(format!("{}", dest)).unwrap();:imageをdestというファイル名で保存するprintln!("screenshot took {}ms", start.elapsed().as_millis());: スクリーンショットを撮影するのにかかった時間を表示する
以上となります。
この関数は以下のように呼び出すことができます。
screenshot("screenshot.png");
または、以下のように呼び出すこともできます。
screenshot("./path/to/screenshot.png");
まとめ
この記事では、Rustでスクリーンショットを撮影する方法を紹介しました。