' schrieb:Hallo Leutz,
Hätte mal eine kurze Frage bzgl. Pointer und LabVIEW.
Habe schon im Tutorial gelesen, dass das nicht ganz verträglich ist.
Möchte ein Probeprogramm schreiben, das ich nicht unbedingt brauche, und möchte vorher abchecken ob das einfach zu machen ist, oder ob ich mir das spare.
Folgendes:
In meiner DLL-Beschreibung ist ein Parameter angegeben, der einen Pointer darstellt:
Pointer to the image buffer.
diese DLL soll einen Snapshot einer Kamera auslösen und ich vermute, dass der Pointer auf den Speicherplatz verweist.
Meine Frage ist nun, ob meine Vermutung richtig ist und wenn ja, kann ich das Bild/Image irgendwie einlesen bzw. anzeigen.
Gruß Daniel
Also abgesehen von den Sachen die schon erwähnt wurden ist die meist generische Weise um einen Buffer darzustellen, um ein Array von Bytes zu verwenden. Und hier hakts auch schon.
Um die Daten die Du zurückbekommst in ein sinnvolles Bild umwandeln zu können musst Du wissen was auf welche Weise in diesen Buffer geschrieben wurde. Bildinformationen sind sehr verschieden und können in unzähligen Formaten gestreamt werden. Ein paar Dinge die Du abklären musst:
- Ist vor den eigentlichen Bilddaten ein Header der die verschiedenen hiernach angegebenen Parameter in einem bestimmten Format definiert oder weisst Du sie von irgendwo anders?
- Wieviele Bits hat jedes Pixel?
- Wie ist die Farbe codiert? Im Pixel selber oder über eine Farbpalette und wieviele Bits für jede der drei Grundfarben.
- Was ist das Padding? Das beschreibt auf wieviele Bytes jede Bildzeile aufgefüllt wird, wenn sie nicht ein Vielfaches dieses Wertes lang ist.
- Was sind die Abmessungen (Breite und Höhe) des Bildes? Die Bilddaten sind ein einziger Stream von Datenbytes und um ein Bild zu erhalten musst Du das irgendwie wieder zurückwandeln.
- Wurde irgendeine Kompression benützt?
Da es alleine mit diesen Parametern schon beinahe unendlich viele Möglichkeiten gibt, kann keine Standard-LabVIEW-Routine bestehen, die dies einfach so mal für Dich automagisch erledigt.
Rolf Kalbermatter