MP4, AVI Snap

動画再生を停止して、画面全体から静止画像を抜き出して保存します。

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

プログラムの説明

  1. 再生するファイル(AVI, MP4)をボタンのクリックで選択します。
    再生を一時停止して、スクリーンから画像を抜き出して、静止画を PNG ファイル(c:\tmp\w.png)に保存します。
    事前に c:\tmp\ のフォルダーを作成しておいて下さい。
  2. Windows10 & Visual Studio Enterprise 2017 を使って、自動生成のプロジェクトから構築します。
    デザイナーを表示してツールボックスから Media Player と二個のボタンと Open File Dialog を張り付けます。
    ボタン1のキャプションを "Load" に、ボタン2のキャプションを "Snap" にしてイベントハンドラを追加します。
  3. xp, yp は、スクリーン上に配置されている Form の左上座標です。
    siz = axWindowsMediaPlayer1.Size; は Media Player のサイズです。
    pt = axWindowsMediaPlayer1.Location; は Form 上に配置される Media Player の左上座標です。
    Media Player の画像は、Form の左上座標と Media Player の左上座標を加えた値になります。
  4. 自動生成で作成した Form1.cs のソースコードを修正して下さい。
    Form1() でウインドウのサイズを 800*600 に設定しています。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                Width = 800;
                Height = 600;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string fileName = this.openFileDialog1.FileName;
                    axWindowsMediaPlayer1.URL = fileName;
                }
            }
    
            private void button2_click(object sender, EventArgs e)
            {   Size    siz;
                Point   pt;
                int     xp, yp;
                siz = axWindowsMediaPlayer1.Size;
                xp = this.Location.X;
                yp = this.Location.Y;
                pt = axWindowsMediaPlayer1.Location;
                pt.X += xp;
                pt.Y += yp;
                Bitmap bmp = new Bitmap(siz.Width, siz.Height);
                Graphics g = Graphics.FromImage(bmp);
                MessageBox.Show("X:" + pt.X + "  Y:" + pt.Y);
                g.CopyFromScreen(pt, new Point(0, 0), siz);
                g.Dispose();
                bmp.Save("c:\\tmp\\w.png");
                bmp.Dispose();
            }
        }
    }
    
  5. プログラムを起動して Load ボタンをクリックすると Open File Dialog が開きます。
    ファイル(AVI, MP4)を選択するとムービーが再生されます。
    Media Player の下に表示されているユーザーインターフェイスの一時停止ボタンで再生を停止します。
    "Snap" ボタンをクリックすると、表示中のフレーム(画像)をキャプチャして "c:\\tmp\\w.png" に保存します。

拡大表示

  1. 私は小さい文字が見にくくなって、パソコン画面を拡大して表示しています。 (^_^;)
    拡大率を「150%」に、解像度は 1920×1080(推奨) に設定しています。
  2. この環境に合わせて button2_click() 関数を修正します。
    取得したサイズや座標を 1.5 倍しています。
            private void button2_click(object sender, EventArgs e)
            {   Size    siz;
                Point   pt;
                int     xp, yp;
                siz = axWindowsMediaPlayer1.Size;
                siz.Width = (int)(siz.Width*1.5);
                siz.Height = (int)(siz.Height*1.5);
                xp = this.Location.X;
                yp = this.Location.Y;
                pt = axWindowsMediaPlayer1.Location;
                pt.X += xp;
                pt.Y += yp;
                pt.X = (int)(pt.X*1.5);
                pt.Y = (int)(pt.Y*1.5);
                Bitmap bmp = new Bitmap(siz.Width, siz.Height);
                Graphics g = Graphics.FromImage(bmp);
                MessageBox.Show("X:" + pt.X + "  Y:" + pt.Y);
                g.CopyFromScreen(pt, new Point(0, 0), siz);
                g.Dispose();
                bmp.Save("c:\\tmp\\w.png");
                bmp.Dispose();
            }
    

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