Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

Visual Studio Community 2019 C# WPF - キャプチャ画像を得る。 -

人様のコードにおんぶにだっこなのはまだ序の口で、あまりにも基礎知識が無さ過ぎるために、プロジェクトごと提供されているサンプルでもないとそもそも全く動かせない。
こちら「C#,WPF】コントロールやウィンドウを画像キャプチャする」を参考にさせていただいた。
「参考にさせていただいた」どころじゃなく、単に「いただいた」が正確なところ。

試しに自分で作ったプロジェクトにコードだけをクリップボード経由でテキストとして貼り付けても、エラーがいっぱいだった。
参考サイトの解説をちゃんと読んだら、

まず、プロジェクトに以下の参照設定を追加しておきます。

と書かれていて、以下の手順で確認すると、

4つ書かれているうちのSystem.Drawingが参照されていなかったのでチェックを入れた。

これでエラーは無くなったが、起動しても何も起こらなかった。

ブレークポイントを設定してトレースしたら、何も行わない。
Buttonを追加してクリック・イベントに動作を割り当てたらちゃんとキャプチャする。
つまり、イベントが設定されてない。
起動時にWindowが表示されたら1秒待ってから実行するように作られているはずだが、Windowの表示というイベントに何も仕事が設定されていないと気付いた。
下が自分で作ったプロジェクトのWindowのイベントハンドラーで、真っ白だ。

下がもらってきたプロジェクトのもので、Window_ContentRenderedという、1秒のタイマーを実行する部分が設定されている。

ContentRenderedの横の空欄をダブルクリックすると

が作成されて、この中にタイマーの処理をコピペしたら予定通りの動作をするようになった。

オリジナルは、実行するとWindows内に表を描いてその下にその表のキャプチャ画像を貼る、というプログラムだ。

とりあえずは、キャプチャするエリアの指定を変えて、もとのプログラムで指定しているのとは違う場所の画像を得られるようにした。

(0, 0) – (1920, 1080) を指定すれば全画面のキャプチャが取れる。


結果はプロジェクト・フォルダの下のbinフォルダにresult.pngとして保存される。

古いモニタを活用してマルチモニターにしてあるのだが、その領域も含めてキャプチャできる。

このエントリーをはてなブックマークに追加

Posted under: C#


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.