Einzelbilder von einer Webcam



  • Hallo,

    ich möchte einzelne Bilder von einer Webcam auswerten. Dazu habe ich das Beispiel 16.5 aus dem "Visual C# 2010 Kochbuch" ausprobiert, Code siehe unten. Das Problem dabei ist, dass nur etwa alle 8 Sekunden ein neues Bild angezeigt wird. Den Timer1 habe ich bereits auf eine sehr kleine Zeit eingestellt, daran kann das nicht liegen. Hat jemand eine Idee wie man das schneller machen könnte? Ich will kein Life-Video darstellen. Es geht mir nur darum, innerhalb einer Schleife ein Einzelbild zu laden und dieses Bild dann auszuwerten. Eine Zykluszeit von 1 Sekunde würde schon genügen.

    Gruß
    Michael

    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 System.IO;
    
    namespace WebCam
    {
        public partial class Form1 : Form
        {
            const string wiaCommandTakePicture = "{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}";
            WIA.Device Camera;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    Camera = (new WIA.CommonDialog()).ShowSelectDevice();
                    if (Camera.Type == WIA.WiaDeviceType.VideoDeviceType)
                        timer1.Enabled = true;
                    else
                    {
                        MessageBox.Show("Keine Webcam vorhanden!");
                        Application.Exit();
                    }
    
                }
                catch (Exception)
                {
                    MessageBox.Show("Keine Webcam vorhanden!");
                    Application.Exit();
                }
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                timer1.Enabled = false;
                this.Text = "ACHTUNG: AUFNAHME";
                WIA.Item item = Camera.ExecuteCommand(wiaCommandTakePicture);
                WIA.ImageFile img = item.Transfer();
                if (img != null)
                {
                    WIA.Vector vector = img.FileData;
                    pictureBox1.Image = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
                }
                this.Text = "-";
                timer1.Enabled = true;
            }
        }
    }
    


  • In welcher Assembly/DLL findet man WIA?



  • µ schrieb:

    In welcher Assembly/DLL findet man WIA?

    wiaaut.dll



  • Würdest Du mir freundlicherweise auch noch verraten, wo ich die finde?



  • µ schrieb:

    Würdest Du mir freundlicherweise auch noch verraten, wo ich die finde?

    http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=18287


  • Administrator

    WIA scheint zum Teil sehr langsam zu sein. Kannst im Inet mal suchen gehen nach "WIA slow" und du findest einige Threads aber ohne Lösungen. Mir ist zumindest noch nie eine Lösung vor die Augen gekommen, nicht mal eine mögliche Erklärung.

    Du könntest statt WIA allerdings DirectShow einsetzen. Wie man DirectShow für sowas verwendet oder wenn du gleich eine fertige Implementierung willst, dann schau dir mal Aforge.Net an.

    Aforge.Net dürfte womöglich sowieso interessant sein, wenn du danach das Bild in irgendeiner Weise bearbeiten möchtest.

    Grüssli


Anmelden zum Antworten