Capture の基礎

スクリーン・キャプチャの基礎です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. パソコンのスクリーンに表示されているイメージをキャプチャして PNG File に保存します。
    Windows10 & Visual Studio Enterprise 2017 を使って、自動生成のプロジェクトから構築します。
    キャプチャする内容は何でもよいのですが カレンダーを表示する を使ってみましょう。
  2. カレンダーが表示出来たら、プログラムの終了時にスクリーンをキャプチャして PNG File に保存します。
    Form1.cs に FormClosing のイベントを設定します。
        public Form1()
        {
            InitializeComponent();
            FormClosing += new FormClosingEventHandler(Form_Closing);
        }
    
  3. Form_Closing() 関数です。
    スクリーンのイメージを "c:\\tmp\\w.png" に保存します。
    事前に "c:\tmp\" のフォルダーを作成しておいて下さい。
        private void Form_Closing(object sender, FormClosingEventArgs e)
        {
            int     width, height;
            width = Screen.PrimaryScreen.Bounds.Width;
            height = Screen.PrimaryScreen.Bounds.Height;
            Bitmap bmp = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);
            g.Dispose();
            bmp.Save("c:\\tmp\\w.png");
            bmp.Dispose();
        }
    
  4. コンパイルして実行するとカレンダーが表示されます。
    そのまま終了すると c:\tmp\ のフォルダーに w.png が作成されます。
    w.png を確認すると、スクリーンに表示されているイメージが保存されています。
    BMP 形式で保存するときは、次のように書きます。
        bmp.Save("c:\\tmp\\w.bmp", ImageFormat.Bmp);
    

Form をキャプチャ

  1. スクリーン全体で無く、Form だけをキャプチャして保存します。
    Form1.cs の Form_Closing() 関数を次のように修正して下さい。
        private void Form_Closing(object sender, FormClosingEventArgs e)
        {
            Bitmap bmp = new Bitmap(this.Width, this.Height);
            this.DrawToBitmap(bmp, new Rectangle(0, 0, this.Width, this.Height));
            bmp.Save("C:\\tmp\\w.png");
            bmp.Dispose();
        }
    
  2. 今度はスクリーン全体では無く、Form の画像だけが w.png に保存されています。

拡大表示

  1. 私はパソコン画面を拡大して表示しています。
    1. スクリーンを右クリックします。
    2. [ディスプレイ設定]から[テキスト、アプリ、その他の項目のサイズを変更する]を選択します。
    3. 150% に設定します。
    4. 解像度は 1920×1080(推奨) のままです。
  2. この環境でサイズを確認すると「Width=1280, Height=720」になっていました。
            MessageBox.Show("Width:" + width + "  Height:" + height);
    
  3. このままでは、スクリーン全体をキャプチャ出来ないので Width, Height を修正します。
            width = Screen.PrimaryScreen.Bounds.Width;
            height = Screen.PrimaryScreen.Bounds.Height;
            width = (int)(width*1.5); 
            height = (int)(height*1.5); 
            MessageBox.Show("Width:" + width + "  Height:" + height);
            Bitmap bmp = new Bitmap(width, height);
    
  4. これでスクリーン全体をキャプチャ出来るようになりました。
    「Form をキャプチャ」では、拡大表示しても問題無くキャプチャ出来ています。

前田稔(Maeda Minoru)の超初心者のプログラム入門