2 Webcams Sceenshot speichern

Gast #2595993
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
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
}
#2597562
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
Gast #2602684
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
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
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();
            }
        }
Gast #2604221
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.
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren