2 Webcams Sceenshot speichern

Gast #2595993
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
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Linq;
7
using System.Text;
8
using System.Windows.Forms;
9

10
using AForge.Video;
11
using AForge.Video.DirectShow;
12

13
namespace Kamera
14
{
15
    public partial class Form1 : Form
16
    {
17
        private FilterInfoCollection VideoCaptureDevices;
18
        private VideoCaptureDevice FinalVideo_One;
19
        private VideoCaptureDevice FinalVideo_Two;
20
        private Bitmap video_one;
21
        private Bitmap video_two;
22
        private Bitmap Save_video_two;
23
        
24

25
        public Form1()
26
        {
27
            InitializeComponent();
28
        }
29

30
        private void Form1_Load(object sender, EventArgs e)
31
        {
32
            
33
            
34
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
35
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
36
            {
37
               
38
                comboBox1.Items.Add(VideoCaptureDevice.Name);
39
                comboBox2.Items.Add(VideoCaptureDevice.Name);
40
            }
41
            comboBox1.SelectedIndex = 0;
42
            comboBox2.SelectedIndex = 0;
43

44
        }
45

46
        private void button1_Click(object sender, EventArgs e)
47
        {
48
            FinalVideo_One = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
49
            FinalVideo_One.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame_One);
50
            FinalVideo_One.Start();
51
        }
52
        void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
53
        {
54
            video_one = (Bitmap)eventArgs.Frame.Clone();
55
            pictureBox1.Image = video_one;
56
            
57
            }
58

59
        private void button2_Click(object sender, EventArgs e)
60
        {
61
            if (FinalVideo_One.IsRunning)
62
            {
63

64
                FinalVideo_One.Stop();
65
            
66
            }
67
        }
68

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

75
        }
76
        void FinalVideo_NewFrame_Two(object sender, NewFrameEventArgs eventArgs)
77
        {
78
            
79
            video_two = (Bitmap)eventArgs.Frame.Clone();
80
            pictureBox2.Image = video_two;
81
            //video_two.Save("C:\\video1.bmp");
82
            //video_two.Dispose();
83
        }
84

85
        private void button4_Click(object sender, EventArgs e)
86
        {
87
            if (FinalVideo_Two.IsRunning)
88
            {
89
                FinalVideo_Two.Stop();
90
                
91
                /*
92
                Bitmap Save_video_two = new Bitmap(2,2);
93
                Save_video_two = video_two;
94
                Save_video_two.Save("C:\\Documents and Settings\\Admin\\Desktop\\Cam2.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
95
                Save_video_two.Dispose();*/
96
            }
97
        }
98
       
99
    }
100
}
Gast #2596040
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
#2597562
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
Gast #2602684
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
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Linq;
7
using System.Text;
8
using System.Windows.Forms;
9

10
using AForge.Video;
11
using AForge.Video.DirectShow;
12

13
namespace Kamera
14
{
15
    public partial class Form1 : Form
16
    {
17
        private FilterInfoCollection VideoCaptureDevices;
18
        private VideoCaptureDevice FinalVideo_One;
19
        private VideoCaptureDevice FinalVideo_Two;
20
        private Bitmap video_one;
21
        private Bitmap video_two;
22
        private Bitmap Save_video_two;
23
        
24

25
        public Form1()
26
        {
27
            InitializeComponent();
28
        }
29

30
        private void Form1_Load(object sender, EventArgs e)
31
        {
32
            
33
            
34
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
35
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
36
            {
37
               
38
                cb_Cam1.Items.Add(VideoCaptureDevice.Name);
39
                cb_Cam2.Items.Add(VideoCaptureDevice.Name);
40
            }
41
            cb_Cam1.SelectedIndex = 0;
42
            cb_Cam2.SelectedIndex = 0;
43

44
        }
45

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

52
        }
53
        
54

55
        
56
        void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
57
        {
58
            video_one = (Bitmap)eventArgs.Frame.Clone();
59
            pb_Cam1_.Image = video_one;
60
            
61
            
62
            }
63

64
        private void bt_StopCam1_Click(object sender, EventArgs e)
65
        {
66
            if (FinalVideo_One.IsRunning)
67
            {
68

69
                FinalVideo_One.Stop();
70

71

72
            }
73

74
        }
75

76
        private void bt_StartCam2_Click(object sender, EventArgs e)
77
        {
78

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

83
        }
84

85
        
86
        
87
        void FinalVideo_NewFrame_Two(object sender, NewFrameEventArgs eventArgs)
88
        {
89
            
90
            video_two = (Bitmap)eventArgs.Frame.Clone();
91
            pb_Cam2_.Image = video_two;
92
            //video_two.Save("C:\\video1.bmp");
93
            //video_two.Dispose();
94
        }
95

96
        
97

98
       
99
        
100

101
        private void bt_StopCam2_Click(object sender, EventArgs e)
102
        {
103
            if (FinalVideo_Two.IsRunning)
104
            {
105
                FinalVideo_Two.Stop();
106

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

Danke nochmal
Gast #2603380
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();
            }
        }
Gast #2604221
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.
1
  void FinalVideo_NewFrame_One(object sender, NewFrameEventArgs eventArgs)
2
        {
3
           
4
            video_one = (Bitmap)eventArgs.Frame.Clone();
5
            Save_Video_one = video_one;
6
            Save_Video_one.Save("C:\\Documents and Settings\\Admin\\Desktop\\Cam1.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
7
           
8
            grayscale();
9
            //invert();
10
            //color();
11
            BlobCounter bc = new BlobCounter();
12

13
            bc.ObjectsOrder = ObjectsOrder.Area;
14
            bc.MinHeight = 15;
15
            bc.MaxWidth = 15;
16

17
            bc.ProcessImage(video_one);
18
            video_one.Dispose();
19

20
            Blob[] blob = bc.GetObjectsInformation();
21

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

29

30

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

Gruss

Michael

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.