Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Linie in Live-Kamerabild zeichnen (https://www.delphipraxis.net/179319-linie-live-kamerabild-zeichnen.html)

Vis 26. Feb 2014 17:40

Linie in Live-Kamerabild zeichnen
 
Hallo zusammen,

eine Frage, und zwar habe ich eine Kamera, die ein Livebild anzeigen soll. Nun möchte ich gerne eine Linie einzeichnen.
Das Kamerabild kann ich mit einer Fremkomponente anzeigen lassen. Das Zeichnen mache ich mit folgender Funktion:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  hdc : Integer;
begin
  hdc := GetDC(uEyeCam1.Handle); //Handle der Kamera
  rectangle(hdc, 10,10,20,40);
  releaseDC(uEyeCam1.Handle, hdc);
end;
Leider wird das Kamerabild ja ständig erneuert, sodass meine Zeichnung ständig überschrieben wird.
Hat jemand eine Idee wie ich die Zeichnung vor das Kamerabild bekomme? oder sonst eine gute Anmerkung?

Grüße

Aphton 26. Feb 2014 18:02

AW: Linie in Live-Kamerabild zeichnen
 
Zitat:

Zitat von Vis (Beitrag 1249745)
Leider wird das Kamerabild ja ständig erneuert, sodass meine Zeichnung ständig überschrieben wird.

Dann zeichne doch immer nur nach dem "Erneuern"!
Such nach dem passenden Event! Ich kenn die Komponente leider nicht.

TiGü 26. Feb 2014 18:52

AW: Linie in Live-Kamerabild zeichnen
 
Oder zyklisch mit einen Timer, der schneller ist, als die Refresh-Rate der Kamera!

himitsu 27. Feb 2014 01:25

AW: Linie in Live-Kamerabild zeichnen
 
Ergibt natürlich einen schön blinkenden Text.

Es wurde natürlich das Wichtigste nicht verraten.
Was für eine "Kamera" ist das denn? Also über was wird die angesprochen?

Einige Schnittstellen nutzen intern Messages, bzw. einen Timer, und auf dessen Messages könnte man reagieren und direkt nach dessen Zeichenroutiene direkt neu drüber malen.

Vis 27. Feb 2014 12:37

AW: Linie in Live-Kamerabild zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das mit dem Timer hatte ich auch ausprobiert. Leider hat man dann ein flimmerndes Bild.

Die Kamera ist eine uEye-Cam vom Hersteller IDS in Deutschland mit GigE Verbindung.
Wenn man sich in die Doku ein bißchen einließt, findet man dann auch Funktionen zum "Direct Rendering", die man mit der ActiveX-Komponente des Herstellers verwenden kann. Zuerst muss man das Direct 3D einschalten und dann kann man sog. Overlays über das Kamerabild zeichnen.
Sieht dann so aus:

Delphi-Quellcode:
    uEyeCam1.EnableDirect3D := True;
    resultInt := uEyeCam1.DRGetOverlayDC(hdc);
    rectangle(hdc, 10,10,200,100);
    resultInt := uEyeCam1.DRReleaseOverlayDC;
    resultInt := uEyeCam1.DRShowOverlay(1);
Wichtig ist das DirectX auf dem PC installiert ist.
Dann funktioniert das einwandfrei (nach 2h Beispielprogramme in C durchforsten :)

Danke für die Hinweise.
Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz