2 Stimmen

C# Windows Forms erfassen ein Bild vom eingebetteten Windows Media Player

Ich habe eine Windows Forms-Anwendung in C# geschrieben, die das eingebettete Windows Media Player (AxInterop.WMPLib.dll und WMPLib.dll) verwendet, um einige Videodateien abzuspielen. Jetzt muss ich eine Option zum Erfassen eines Bildes aus dem Video hinzufügen, wenn auf die Schaltfläche geklickt wird. Wenn ich die fensterlose Option auf true setze, kann ich ein Bild aus einem Video erfassen, aber wenn ich die fensterlose Option auf true setze, sehe ich auf einigen Computern kein Video-Bild. Ohne die fensterlose Option erhalte ich nur einen schwarzen Bildschirm mit diesem Code:

        System.Drawing.Image ret = null;
        try{
            Bitmap bitmap = new Bitmap(wmPlayer.Width-26, wmPlayer.Height-66);
            {
                Graphics g = Graphics.FromImage(bitmap);
                {
                    Graphics gg = wmPlayer.CreateGraphics();
                    {
                        this.BringToFront();

                           g.CopyFromScreen(
                            wmPlayer.PointToScreen(
                                new System.Drawing.Point()).X+13,
                            wmPlayer.PointToScreen(
                                new System.Drawing.Point()).Y,
                            0, 0,
                            new System.Drawing.Size(
                                wmPlayer.Width-26,
                                wmPlayer.Height-66)  
                            );
                    }
                }
                using (MemoryStream ms = new MemoryStream()){
                        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                        ret = System.Drawing.Image.FromStream(ms);
                        ret.Save(@"C:\\WMP_capture.png");
                        pictureBox1.Image=ret;
                }
            }
            bitmap.Dispose();

        }catch (Exception){ }

Wie kann ich einen Frame (Snapshot) aus einem Video, das im eingebetteten Windows Media Player abgespielt wird, ohne die fensterlose Option in C# erfassen?

Oder gibt es einen anderen Videoplayer für C# Windows Forms, der einfach implementiert werden kann und Capture-Funktionen unterstützt.

0voto

Vishal Sen Punkte 1097

Hoffe, dieser Code funktioniert für Sie

if (!string.IsNullOrEmpty(axWindowsMediaPlayer1.URL)){
axWindowsMediaPlayer1.Ctlcontrols.pause();

System.Drawing.Image ret = null;
try
{
    // Bild aufnehmen, BEVOR der saveFileDialog erscheint!!
    Bitmap bitmap = new Bitmap(axWindowsMediaPlayer1.Width, axWindowsMediaPlayer1.Height);
    {
        Graphics g = Graphics.FromImage(bitmap);
        {
            Graphics gg = axWindowsMediaPlayer1.CreateGraphics();
            {
                //timerTakePicFromVideo.Start();
                this.BringToFront();
                g.CopyFromScreen(
                    axWindowsMediaPlayer1.PointToScreen(
                        new System.Drawing.Point()).X,
                    axWindowsMediaPlayer1.PointToScreen(
                        new System.Drawing.Point()).Y,
                    0, 0,
                    new System.Drawing.Size(
                        axWindowsMediaPlayer1.Width,
                        axWindowsMediaPlayer1.Height)
                    );
            }
        }
        // danach Bitmap-Datei speichern, wenn der Benutzer will
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                ret = System.Drawing.Image.FromStream(ms);
                ret.Save(saveFileDialog1.FileName);
            }
        }
    }
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}

}

Noch eine Demo für Sie : http://www.codeproject.com/Articles/34663/DirectShow-Examples-for-Using-SampleGrabber-for-Gr

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X