www.mikrocontroller.net

Forum: PC-Programmierung 2 Webcams Sceenshot speichern


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,


ich hab ein Probelm und zwar hahe ich hier einen Code um 2 Webcams mit 
Aforge.net anzusprechen.
Als Ergäzung hätte ich jetzt noch von jemand Kamerabild einen Screenshot 
geamcht, wenn ich auf Stop drück. Das Probelm ist, wenn ich einmal auf 
Stop drücke, dann ist das Bild weg und ich kann keinen weiteren 
Screenshot mehr machen. Hat mir jemand eine Lösung für mein Problem?

wäre super

Hier der Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using AForge.Video;
using AForge.Video.DirectShow;

namespace Kamera
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection VideoCaptureDevices;
        private VideoCaptureDevice FinalVideo_One;
        private VideoCaptureDevice FinalVideo_Two;
        private Bitmap video_one;
        private Bitmap video_two;
        private Bitmap Save_video_two;
        

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
            {
               
                comboBox1.Items.Add(VideoCaptureDevice.Name);
                comboBox2.Items.Add(VideoCaptureDevice.Name);
            }
            comboBox1.SelectedIndex = 0;
            comboBox2.SelectedIndex = 0;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            FinalVideo_One = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
            FinalVideo_One.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame_One);
            FinalVideo_One.Start();
        }
        void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
        {
            video_one = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = video_one;
            
            }

        private void button2_Click(object sender, EventArgs e)
        {
            if (FinalVideo_One.IsRunning)
            {

                FinalVideo_One.Stop();
            
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            FinalVideo_Two = new VideoCaptureDevice(VideoCaptureDevices[comboBox2.SelectedIndex].MonikerString);
            FinalVideo_Two.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame_Two);
            FinalVideo_Two.Start();

        }
        void FinalVideo_NewFrame_Two(object sender, NewFrameEventArgs eventArgs)
        {
            
            video_two = (Bitmap)eventArgs.Frame.Clone();
            pictureBox2.Image = video_two;
            //video_two.Save("C:\\video1.bmp");
            //video_two.Dispose();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (FinalVideo_Two.IsRunning)
            {
                FinalVideo_Two.Stop();
                
                /*
                Bitmap Save_video_two = new Bitmap(2,2);
                Save_video_two = video_two;
                Save_video_two.Save("C:\\Documents and Settings\\Admin\\Desktop\\Cam2.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                Save_video_two.Dispose();*/
            }
        }
       
    }
}

Autor: Robert L. (lrlr)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>auf Stop drück


button1, button2, button3, button4

welcher is es denn...

Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Button 1 ist Start Webcam 1
Button 2 ist Stop Webcam 1

Button 3 ist Start Webcam 2
Button 4 ist Stop Webcam 2

Ich hätten gerne von jeder Webcam ein Bitmap gespeichert als Snapshot, 
wenn man auf Stop Webcam 1 oder Stop Webcam 2 drückt

Autor: Sven H. (dsb_sven)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sehr empfehlenswert ist es, insbesondere, wenn man Hilfe sucht bei 
Leuten, die das Programm nicht kennen, den Steuerelementen und den 
Variablen sinnvolle Namen zu geben. Du könntest deine Elemente z.B. so 
nennen:

btnStartWebcam1 für den Startknopf für Webcam 1.
btnStopWebcam2 für den Stopknopf für Webcam 2.
lblStatus könnte ein Label sein, dass den aktuellen Status anzeigt.
tbInputCommands könnte eine Textbox heißen, in die Kommandos eingegeben 
werden.

Damit wäre jedem sofort klar, was welches Element tut. Und, jetzt kommt 
der Knaller, Visual Studio benennt die EventHandler dann auch nach den 
Steuerelementenamen. Aber nur, wenn die Elemente den Namen schon haben, 
bevor du doppelt drauf klickst.

So, genug getadelt, jetzt zu deinem Problem:

Mir scheint, dass das Problem ist, dass du das Bitmap im EventHandler 
deklarierst. Wenn du das Bitmap in anderen Funktionen benötigst, musst 
du die Variable "Save_video_two" außerhalb der Funktion deklarieren 
und in der Funktion nur mit Werten füllen. Konkret würde das bedeuten, 
dass du den Teil "Bitmap Save_video_two;" oben bei den 
Variablendeklarationen stehen lassen kannst, aber im EventHandler 
lediglich steht "Save_video_two = new Bitmap(2,2);" (also ohne erneutes 
deklarieren mit "Bitmap") weil sonst eine neue, nur in der Funktion 
bekannte, Variable erstellt wird, die, beim verlassen der Funktion, 
wieder aus dem Speicher gelöscht wird.

Noch Fragen? :D

Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke! Ich werde es versuchen und wenn es noch ein Probalm gibt mich 
nochmal maleden.


Gruss

Michael

Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für die Hilfe.


Mein Problem ist aber immer noch, dass wenn ich bei Cam2 z.B. auf Stop 
drücke, ich zwar ein Bild bekomme, allerdings dann der Live STream von 
meiner Webcam abbricht. Woran liegt das dann?



Gruss

Michael

Hier der neue Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using AForge.Video;
using AForge.Video.DirectShow;

namespace Kamera
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection VideoCaptureDevices;
        private VideoCaptureDevice FinalVideo_One;
        private VideoCaptureDevice FinalVideo_Two;
        private Bitmap video_one;
        private Bitmap video_two;
        private Bitmap Save_video_two;
        

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
            {
               
                cb_Cam1.Items.Add(VideoCaptureDevice.Name);
                cb_Cam2.Items.Add(VideoCaptureDevice.Name);
            }
            cb_Cam1.SelectedIndex = 0;
            cb_Cam2.SelectedIndex = 0;

        }

        private void bt_StartCam1_Click(object sender, EventArgs e)
        {
            FinalVideo_One = new VideoCaptureDevice(VideoCaptureDevices[cb_Cam1.SelectedIndex].MonikerString);
            FinalVideo_One.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame_One);
            FinalVideo_One.Start();

        }
        

        
        void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
        {
            video_one = (Bitmap)eventArgs.Frame.Clone();
            pb_Cam1_.Image = video_one;
            
            
            }

        private void bt_StopCam1_Click(object sender, EventArgs e)
        {
            if (FinalVideo_One.IsRunning)
            {

                FinalVideo_One.Stop();


            }

        }

        private void bt_StartCam2_Click(object sender, EventArgs e)
        {

            FinalVideo_Two = new VideoCaptureDevice(VideoCaptureDevices[cb_Cam2.SelectedIndex].MonikerString);
            FinalVideo_Two.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame_Two);
            FinalVideo_Two.Start();

        }

        
        
        void FinalVideo_NewFrame_Two(object sender, NewFrameEventArgs eventArgs)
        {
            
            video_two = (Bitmap)eventArgs.Frame.Clone();
            pb_Cam2_.Image = video_two;
            //video_two.Save("C:\\video1.bmp");
            //video_two.Dispose();
        }

        

       
        

        private void bt_StopCam2_Click(object sender, EventArgs e)
        {
            if (FinalVideo_Two.IsRunning)
            {
                FinalVideo_Two.Stop();

                Save_video_two = new Bitmap(640, 480);
                Save_video_two = video_tw;
                Save_video_two.Save("C:\\Documents and Settings\\Admin\\Desktop\\Cam2.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                Save_video_two.Dispose();
            }
        }


Danke nochmal

Autor: Sven H. (dsb_sven)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Was steht denn in der Doku zu
VideoCaptureDevice.Stop();

Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Also ich habe jetzt rausgefunden.


Vielen Dank nochmal

Autor: Sven H. (dsb_sven)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Verrätst du uns auch, was die Lösung ist?

Autor: Uwe (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
private void bt_StopCam2_Click(object sender, EventArgs e)
        {
            if (FinalVideo_Two.IsRunning)
            {
>                FinalVideo_Two.Stop();    //<<<<<DAS HIER WEGMACHEN

                Save_video_two = new Bitmap(640, 480);
                Save_video_two = video_tw;
                Save_video_two.Save("C:\\Documents and 
Settings\\Admin\\Desktop\\Cam2.bmp", 
System.Drawing.Imaging.ImageFormat.Bmp);
                Save_video_two.Dispose();
            }
        }

Autor: Michael (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja klar, ich habe das jetzt so gelöst, dass ich einfach über den 
FinalVideo_NewFrame_One das Bild jeweis bearbeite und das Bild vorher 
auf Festplatte speicher.


  void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
        {
           
            video_one = (Bitmap)eventArgs.Frame.Clone();
            Save_Video_one = video_one;
            Save_Video_one.Save("C:\\Documents and Settings\\Admin\\Desktop\\Cam1.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
           
            grayscale();
            //invert();
            //color();
            BlobCounter bc = new BlobCounter();

            bc.ObjectsOrder = ObjectsOrder.Area;
            bc.MinHeight = 15;
            bc.MaxWidth = 15;

            bc.ProcessImage(video_one);
            video_one.Dispose();

            Blob[] blob = bc.GetObjectsInformation();

            if (blob.Length == 0 || blob.Length > 1)
            {
                lb_blob.Text = "Y Coord: Not valid";
                return;
            }
            IntPoint center_blob = blob[0].CenterOfGravity;



            //pb_Cam1_.Image = video_one;
            pb_Cam1_.Load("C:\\Documents and Settings\\Admin\\Desktop\\Cam1.bmp");
            pb_return.Image = video_one;
            }


Gruss

Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net