- 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でスクリーンショットを撮影する方法を紹介しました。