はじめに
最近はゲームへの意欲が減ってきて、暇つぶしにコードを書いています。けーとらです。
そこで、なんか作ってみようかなと思いまして。Windows標準のスクショって不便じゃね?と思ったので作ります。
5記事くらいで完成するといいな。
標準のスクリーンショットって不便じゃね?
理由は2つあって、
- スクショ撮るのにショートカットキーが3つも同時押しは大変(マウスクリック希望)
- 「切り取り&スケッチ」がスクショの編集ソフトとしてイケてない
2については矩形とか、丸とか、コメントとか。そういうものを画像に加えたいのであって、プリクラみたくお絵かきしたいわけじゃないのよMicrosoftさん。
全画面だけじゃないスクショ機能が付いたのは素晴らしいんだけど、やっぱりまだ不便。
既存のスクショアプリでも良さげだけど、そこは作る暇があるなら作ってしまえという発想で。
要求をまとめてみた
ということで、要求はこんな感じ?
- スクショが撮れること(全画面、ウィンドウ、指定箇所の3通りはマスト)
- 多くてもクリック2回で起動すること
- 矩形描画、丸描画、テキスト挿入編集ができること
スクショ機能と編集機能に分かれているため実質的には2つアプリを作るイメージになりました。
ざっくりスクショアプリを作ってみる
アプリはC#で作ればいいやということで、なんとなくWPF App(.NET Core)を選択。ちなみにC#が専門ではないので、もしかしたら余計な形のコードになってるかもしれない。
ウィンドウの設定
まずは「MainWindow.xaml.cs」をいじって、ウィンドウが全画面表示で背景を透過させるように設定。
public MainWindow() { InitializeComponent(); //Windowのプロパティ設定 WindowStyle = WindowStyle.None; //境界線,ボタンの非表示 WindowState = WindowState.Maximized; //全画面表示 Topmost = true; //最前面表示 AllowsTransparency = true; //透過許可 Background = new SolidColorBrush { //背景色の設定 Color = Colors.Black, Opacity = 0.2 }; }
イベントの追加
次にスクリーンショットを撮影する起点となるイベントを「MainWindow.xmal」から追加。
今回は暫定的にマウスクリックのイベントを起点とします。
スクリーンショットを撮る
Bitmapを使うため「依存関係」>「Nugetパッケージの管理」>「System.Drawing.Common」をインストール。
usingディレクティブに次の2行を追加。
using System.Drawing; using Point = System.Drawing.Point;
スクリーンショットの撮影は意外と簡単に実装できました。
//スクリーンショット撮影 private void CaptureScreen(object sender, MouseButtonEventArgs e) { //全画面領域のオブジェクト生成 Bitmap CaptureBitmap = new Bitmap((int)SystemParameters.PrimaryScreenWidth, (int)SystemParameters.PrimaryScreenHeight); Graphics ScreenGraphics = Graphics.FromImage(CaptureBitmap); //ウィンドウを閉じる Close(); //全画面領域の画像をコピー ScreenGraphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), CaptureBitmap.Size); ScreenGraphics.Dispose(); //画像の出力 CaptureBitmap.Save(@"C:\Users\K_tora\Downloads\capture.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); }
動作確認
プログラムを実行すると全画面が薄暗くなり、画面のいずれかの部分をクリックすると画像が保存されます。
最後に
全画面でスクショが撮れるところが確認できました。
次回は3種類(全画面、ウィンドウ、指定箇所)のスクショを撮影できるようにするところかな?
今のプログラムだと3種類対応するのが難しそうなので、工夫しないとですね。
コメント