2013-02-03 91 views
7

पिछले दो दिनों में मैं सी # का उपयोग कर वेबकैम से एक छवि को कैप्चर करने का एक तरीका ढूंढ रहा हूं। मैं सी # में बहुत नया हूं और मैं बाहरी तीसरे पक्ष के libs का उपयोग नहीं करना चाहता, इसलिए मुझे दो अच्छे तरीके मिले, लेकिन दोनों लगभग एक ही त्रुटि लौटते हैं। मैं उनमें से कोई भी काम करने में नहीं मिला, इसलिए यह वास्तव में अच्छा होगा अगर आप उनमें से एक को चलाने में मदद करें या वैकल्पिक खोजने में मेरी सहायता करें।सी # वेबकैम से छवि कैप्चरिंग

तो मुझे मिला पहला तरीका विंडोज डब्ल्यूआईए का उपयोग कर रहा है। मैं निम्नलिखित कोड मिला:

CommonDialogClass dialog = new CommonDialogClass(); 
Device camera = dialog.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false); 
     // take the photo 
Item item = camera.ExecuteCommand(CommandID.wiaCommandTakePicture); 
ImageFile image = (ImageFile)item.Transfer(FormatID.wiaFormatJPEG); 
     // filename and saving 
image.SaveFile("Test.jpg"); 

इस कोड exacly मैं के लिए क्या देख रहा हूँ हो रहा है, लेकिन मैं इसे, नहीं चल रहा हो सकता है क्योंकि मैं दूसरी पंक्ति पर निम्न त्रुटि हो रही है:

http://www.timvw.be/wp-content/code/csharp/testavicap32.zip 

लेकिन मैं इस कोड पर हो रही है::

Exception from HRESULT: 0x80210015 

दूसरा तरीका मैंने पाया निम्न नमूना साथ Avicap32.dll उपयोग कर रहा है

Image image = ((CaptureDevice)cboDevices.SelectedItem).Capture(); 
image.Save(@"c:\capture.png", ImageFormat.Png); 

निम्नलिखित अपवाद: NullReferenceException: वस्तु संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं।

मुझे लगता है कि दोनों समाधान समस्याएं पैदा कर रहे हैं क्योंकि उन्हें मेरा कैमरा नहीं मिल रहा है, लेकिन मैं बिना किसी समस्या के स्काइप में अपने कैमरे का उपयोग कर सकता हूं।

उत्तर

9
  • डब्ल्यूआईए स्थिरता के लिए है, यह "स्कैनर के साथ काम करने के लिए एपीआई" का एक प्रकार है; 0x80210015WIA_S_NO_DEVICE_AVAILABLE
  • AVICAP32 API का नाम "विंडोज के लिए वीडियो" जो वास्तव में नहीं रहेगी तथा अप्रचलित, इस पर काम कर सकते हैं (अनुकूलता अभी भी यहाँ है), लेकिन संभावना है कि यह करने के लिए

एपीआई कहीं नहीं ले जाएगा रहे हैं है वेब कैमरों के साथ काम कर रहे हैं:

  • डायरेक्टशो
  • मीडिया फाउंडेशन

दोनों देशी एपीआई हैं और आपको सी # कोड से सीधे इंटरफ़ेस करने में कठिनाई हो सकती है, हालांकि DirectShow.NET (विशेष रूप से) और मीडिया फाउंडेशन .NET के साथ आपके पास प्रबंधित कोड के लिए रैपर हैं। आप यहाँ DirectShow.NET के प्रयोग पर अधिक जानकारी प्राप्त कर सकते हैं:

1

मैं Aforge.net framework सलाह देते हैं।

यह नमूना प्रोजेक्ट में videoCaptureDevice class लागू करने में सक्षम था: Snapshot Maker example त्वरित रूप से एक छवि कैप्चरिंग संवाद बनाने के लिए। यह DirectShow Library-How to capture image using directshow library without showing the webcam live images on the PictureBox or Panel से थोड़ा धीमा है लेकिन यह स्थिर है और समर्थित डिवाइस से वीडियो और छवि संकल्प सेट करने के लिए यह आसान तरीका है।

एकमात्र मुद्दा जो मैंने भाग लिया था वह है VideoCaptureDevice.SimulateTrigger() एक वीडियो फ़ीड से एक छवि बनाने के लिए एक बैकग्राउंड थ्रेड का उपयोग करता है और एक ईवेंट पर छवि देता है। यदि आप यूआई थ्रेड पर एक विनफॉर्म नियंत्रण पर लौटाई गई छवि को क्रॉस थ्रेड समस्याओं को रोकने के लिए विधि को प्रतिनिधि करने की आवश्यकता है।

Aforge.net स्रोत SVN link से स्नैपशॉट निर्माता प्रोजेक्ट से स्रोत प्राप्त करें।

+0

यह है कि मैं उन्हें बहुत का उपयोग कर सफल रहा, हालांकि चित्र के लिए तुलनीयता के स्तर बल्कि कम लगती है , मैं 7 परीक्षण कैमरों में से केवल 2 में चल रहा हूं, मेरा अनुमान है कि आधुनिक कैमरे एक अलग छवि कैप्चर फ़ंक्शन से परेशान नहीं होते हैं और केवल एक वीडियो फ्रेम लेते हैं, और कई वर्षों में aforge को अपडेट नहीं किया गया है – MikeT

7

मैंने कई दृष्टिकोणों की कोशिश की, और मेरे लिए सबसे आसान तरीका Emgu.cv (nuget पैकेज) था।

 VideoCapture capture = new VideoCapture(); //create a camera capture 
     Bitmap image = capture.QueryFrame().Bitmap; //take a picture 

पुराने एपीआई दृष्टिकोण (एपीआई संस्करण 3.3.0 के रूप में)

 Capture capture = new Capture(); //create a camera captue 
     Bitmap image = capture.QueryFrame().Bitmap; //take a picture 
+1

Tri इसे संपादित करें लेकिन अब कैप्चर के बजाय VideoCapture होना चाहिए। –

+0

मैं सहमत हूं, सच्चाई से यह प्रश्न शीर्षक को अधिक विशिष्ट होने के लिए पुनर्गठित किया जाना चाहिए। प्रश्न का मुख्य भाग तीसरे पक्ष के पुस्तकालयों के बिना दृष्टिकोण के लिए अनुरोध करता है। लेकिन यह सवाल सी # वेबकैम छवि कैप्चर से संबंधित एकमात्र है। – Ashitakalax