Announcement

Collapse
No announcement yet.

Zugriff mit C# Anwendung auf Kamera mittels dll

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff mit C# Anwendung auf Kamera mittels dll

    Hallo!

    Meine Aufgabe besteht darin durch eine C# Anwendung auf eine Kamera zuzugreifen(Bilder aufnehmen). Dafür benötige ich eine dll die für C# geeignet ist. Bis jetzt habe ich jedoch nur dll's die für c++/c geeignet sind gefunden.

    Villeicht weiß jemand von euch wo ich fündig werden könnte???
    Oder gibt es einen anderen Weg??

    mfg

  • #2
    Hallo Andreas,

    handelt es sich um eine USB-Kamera oder eine "richtige" industrielle Kamera mit Framegrabberkarte?
    Zweiteres habe ich schon gemacht: Eine Möglichkeit wäre z.B. die Funktionen der c++ DLL des Herstellers mittels DllImport (ggf. mit Marshaling) in c# einzubinden.
    Falls vom Hersteller umfangreiche BV-Bibliotheken (d.h. viele Strukturen und Pointer, die nicht immer einfach zu marshallen sind) zur Verfügung gestellt werden, kann es sinnvoll sein, eine Wrapper-DLL in c++ zu schreiben, die zu c# eine einfache Schnittstelle besitzt.
    Manche Hersteller bieten sogar ein COM-Interface an.

    Hier ein Auszug als Beispiel
    Code:
    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;
    
    public class CMVSimpleGrabberCom
    {
            #region Deklaration TImage-Struktur (vgl. Dokumentation Hersteller)
    		
    	[StructLayout(LayoutKind.Sequential)]
    	unsafe class TImage
    	{
    		public byte*  pData = null;
    		public byte** pLine = null;
    		public uint lPitch  = 0;
    		public uint lWidth	= 0;
    		public uint lHeight = 0;
    		public uint lStartX	= 0;
    		public uint lStartY	= 0;
    		public ushort sBytesPerPixel = 0;
    		public ushort sFlags = 0;
    		public ushort sBitsPerPixel = 0;	
    	}
    	#endregion
            (...)
            [DllImport("grabber.dll")]
            private static extern int grabImageToDIB([MarshalAs(UnmanagedType.LPStruct)] int pImage);
    
    	// !!!!!! WARNING unsafe declaration !!!!!!
    	[DllImport("grabber.dll")]
    	unsafe private static extern IntPtr grabSnap();
            (...)
            public Bitmap mvsgSnapShot()
    	{
    		TImage tImage = new TImage();
    		this.InitGrabber(false);
    
    		Marshal.PtrToStructure(CMVSimpleGrabberCom.grabSnap(), tImage);
    
    		return this.ConvertGrabberImageTo24bRGB(tImage);
    	}
    Viele Grüße HP
    Zuletzt editiert von Hans-Peter Tschan; 07.03.2007, 13:41.

    Comment

    Working...
    X