Home Sitemap Contact Imprint
Hardware
Frame Grabber
Motor controller
Special boards
Software
Image processing tools
Motion Analysis
Image Data Bases
Technologies
System solutions
Biomedical equipment
Custom designed
HaSoTec GmbH
Burgwall 20
D-18055 Rostock
Tel.: +49 381 4909834
Fax: +49 381 4909835
Download
Support / FAQ
Inquiry / Contact
Company
Support / FAQ
384x288

Das folgende Beispiel grabbt ein Bild mit 384x288 Bildpunkten mit 32K Farben und stellt das Bild in einem Fenster dar.

Als erster Schritt wird ein Programm erstellt, dass ein Fenster mit Menüleiste erzeugt, ein Testbild generiert und dieses darstellt. Dieser Schritt ist noch reine Programmierung der Windows API ohne Beteiligung eines Framegrabbers.

Hier das komplette Beispiel zum download:testbild.zip

case WM_CREATE:
himg=GlobalAlloc (GHND,384L*288L*2L);
pimg=GlobalLock (himg);
bi.biSize =sizeof(BITMAPINFOHEADER);
bi.biWidth =384L;
bi.biHeight =-288L;
bi.biPlanes =1;
bi.biBitCount =16;
bi.biCompression=BI_RGB;
bi.biSizeImage =384L*288L*2L;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed =0;
bi.biClrImportant =0;
break;

Nachdem ein Fenster erzeugt wurde, wird mit der Funktion GlobalAlloc ein Bildspeicher für 384x288 16-bit-Pixel angefordert. Mit GlobalLock erhält man den Pointer auf die Bilddaten.

Die Datenstruktur BITMAPINFOHEADER beschreibt die Art der Bilddaten des Bildspeichers.

case 3000:
pptr=(WORD *) pimg;
for (i=0;i<(288*384);i++)
*pptr++=(WORD)(((i%384)*31)/384+(((i*31)/110592)<<5)+
((31-((i*31)/110592))<<10));
hDC=BeginPaint(hWnd,&ps);
SetDIBitsToDevice(hDC,0,288,384L,288L,
0,0,0,288L,pimg,
(LPBITMAPINFO)&bi,DIB_RGB_COLORS);
EndPaint(hWnd,&ps);

Die for-Schleife generiert das im Bild gezeigte Farbmuster. SetDIBitsToDevice dient der Bilddarstellung über die Windows-API.

Als zweiter Schritt wird das Programm mit Treiberaufrufen des Framegrabbers erweitert. Das komplette Beispiel zum download: 384x288x555.zip

Wie schon im Testbildbeispiel wird In der WM_CREATE Routine der Speicher für das Bild angefordert und eine Device Independend Bitmap (DIB) mit den der Bildgröße entsprechenden Parametern initialisiert. Außerdem wird nun der Device Driver FG32DRV.SYS geöffnet und mit folgenden Funktionen initialisiert:

FG30DRV (0,&cx,&dx);//init device driver
cx=baseaddr;
dx=0;//enable download
FG30DRV (9,&cx,&dx); //set baseaddr
FG30DRV (8,&cx,&dx); //init grabber

Funktion 0 ist von jedem Programmstart aufzurufen. Funktion 9 setzt die Basisadresse. Die Karten FG30...32 operieren auf fest eingestellten Adressen, deshalb genügt Funktion 9 um die Karten zu initialisieren oder um zwischen mehreren Karten umzuschalten. FG-30-I, FG-31 und FG32 benötigen downloads, um konfiguriert zu werden. Diese Downloads sind nur einmal nach Systemstart erforderlich und dauern ca. 1 Sekunde. Wird Funktion 9 mit dx ungleich Null gerufen, dann erfolgt eine schnelle Umschaltung ohne Download.
Die Karten FG-30-II, FG-33(-II),FG-34 und FG35 benötigen kein Download. Diese Karten sind plug&play Karten, die vom System konfiguriert werden. Falls bekannt ist, dass im System die Adressen 300H...30FH unbelegt sind, kann statt Funktion 9:

    cx=300H;
    dx=0; //enable download
    FG30DRV (9,&cx,&dx); //set baseaddr
    FG30DRV (41,&cx,&dx);//get baseaddr
    basis=cx;

eingesetzt werden.

Dabei wird ein Download auf Adresse 300H versucht und, falls ein Framegrabber FG-32 vorhanden ist, konfiguriert. Die Abfrage der Basisadresse ergibt dann den Wert 300H und falls kein FG-32 vorhanden ist und mindestens ein FG-33, FG34 oder FG35 installiert ist, wird die Basisadresse der zuerst gefunden Karte zurückgegeben. Diese Sequenz ist somit geeignet, um verschiedene Systeme mit jeweils einer Karte FG-32 bis FG-35 mit einem einzigen Programm anzusprechen. Feste Adressen kommen in den Beispielen für FG-30 und FG-31 zum Einsatz, für alle übrigen Karten wird das gleiche Beispiel installiert, indem die genannte Kommando- Sequenz verwendet wird.

Funktion 8 initialisiert die Videoparameter. Das muss mindestens einmal nach Systemstart erfolgen. Es können davor auch Einstellungen geändert werden. Funktion 8 aktiviert die (ggf. geänderten) Einstellungen des Treibers durch Übertragung in die Chipsätze der Karte. Werden später Einstellungen geändert, dann werden diese erst mit erneutem Aufruf von Funktion 8 aktiv.

Der eigentliche Grabvorgang geschieht durch die Funktionen 50,51,52 und 53.
Als Grabvorgang wird das Auslösen der Digitalisierung eines nächsten Bildes in den Speicher der Framegrabberkarte verstanden. Um ein Bild zu erhalten ist später noch das Auslesen dieses Speichers erforderlich, das nachfolgend als Bilddatentransfer bezeichnet wird.

Die Funktionen 50, 51 und 52 legen Bildausschnitt und Bildformat fest. Für die volle Auflösung muss im interlaced Mode (1:1) gearbeitet werden. 1:2 verkleinerte Bilder, die auf einem Halbbild basieren sind ebenfalls möglich. Damit ergeben sich zwei Grundraster für 50Hz: 768x576 und 384x288 und zwei Grundraster für 60 Hz: 640x480 und 320x240. Innerhalb dieser Grundraster lassen sich rechteckige Bildausschnitte festlegen, es werden dann nur die im Ausschnitt liegenden Daten in den karteninternen Speicher übertragen und später ausgelesen. Qualitätsmindernde Skalierungen auf bestimmte Bildgrößen lassen sich mit dieser Funktionalität vermeiden. Dazu ein Beispiel: Es sollen Bilder der Größe 280x200 Pixel verabreitet werden. Lösung: Es wird das Grundraster von 384x288 (50Hz) oder 320x240 (60Hz) verwendet und eine Bildausschnit von 280x200 eingestellt. Statt einer Skalierung von 384x288 (oder 320x240) auf 280x200 wird die Kameraanordnung so gewählt, dass Kameraabstand und Objektiv im Ausschnitt statt im Grundraster das gewünschte Objekt zeigen.
I
Die Bilddatentransfer- Funktionen für Windows XP/2000/NT sind tabellarisch in Abschnitt 1.1 des 7. Kapitels \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Programmierung\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" des Handbuchs beschrieben.
Die Bilddarstellung erfolgt mit der Windows API Funktion SetDIBBitsToDevice.
Mit DirectX oder DrawDibDraw- Funktionen können schnellere und skalierbare Darstellungen erreicht werden.

nach obennach oben
©2021 HaSoTec