Autor Beitrag
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.07.06 15:42 
Hallo,

ich hab ne Kamera mit einem Treiber, der Bilder der Kamera in einem vorstrukturierten Speicherbereich ablegt. Der Treiber speichert ein Bild mit 2 Byte Farbtiefe, Breite 320px, Höhe 240px.

Mein Problem ist es jetzt dieses Bild mit Delphi darzustellen. Am besten wäre es einer Komponente einen Pointer auf den Bilddatenbereich und den Dimensionen zu geben.

Kann mir bitte jemand weiterhelfen...?!

Viele Grüße
rd3
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.07.06 09:36 
Ich hab mich mit dem Problem noch etwas näher befasst, und denke nun, dass die Lösung wär, irgendwie ein HBITMAP Handle zu erzeugen, um daraus ein Objekt vom Typ TBitmap zu machen.

Das Problem ist nur: Wie mache ich aus einem Pointer und den Daten über einen Speicherbereich ein HBITMAP Handle?

Gruß rd3
Matthias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Di 25.07.06 11:55 
Hallo,

Das Objekt TBitmap hat schon alles was du brauchst.

Die Eigenschaft Handle kann
1. ein DDB (device dependend bitmap) referenzieren
2. ein DIB (device independend bitmap) referenzieren

Um welche Art von Handle es sich handelt gibt die Eigenschaft HandleType an.

Im 2. Falls erhälst Du mit GlobalAlloc einen Zeiger auf den Speicherbereich der DIB.
Nun kannst du dir über die DIB Struktur erbitteln, wo sich tatsächlich das Bild befindet
und deinem Kameratreiber mitteilen wohin er das Bild schreiben soll.
Es gibt hier allerdings ein paar Einschränkungen.
- Die Höhe und Breite des Bildes muss vorher gesetzt werden
- Die Farbtiefe anpassen z.b. Pixelformat := pf24Bit
- Das Format in dem Die Kamera die Daten überträgt muss mit dem DIB-Format übereinstimmen.
Nicht nur die Farbtiefe sondern auch die Reihenfolgen (z.B. RGB, BGR)
- Vor jedem Bild muss der Zeiger auf das Bild der DIB ermittelt werden und nach jedem Bild wieder freigegeben werden (GlobalUnlock)

---------------------------------------------------------------------------------------------------------------

Es gibt allerdings auch noch den etwas langsameren Weg. Du reservierst Speicher für die Kamera und kopierst das Bild
dann mit Hilfe der Eigenschaft Scanline.

Matthias