Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
hallo,
habe die aufgabe ein kleines vi zu machen, das einfach nur ein bild aufnimmt und in einer externen c datei dieses bild invertiert ( oder sonstwas) und wieder zurückgibt.. zum lernen quasi, bin noch neuling in LabVIEW.. habe eben das tutorial von hier für das einbinden von dll´s gemacht (addierer) . hat schonmal funktioniert.
nun will ich das bild in die dll/ über die dll??übergeben und eben mit meinem c prog das bild bearbeiten. kann man das bild sonst direkt als array übergeben?
verstehe das bei LabVIEW nämlich noch nich genau, wie sachen übergeben werden.
nach dem grab-baustein kommt ja meine image-anzeige, nur was kommt eig aus dem grab raus? die image-anzeige, gibt mir nen bild aus( wo find ich die überhaupt?? war schon in dem beispiel drin..) und wenn ich ne string-anzeige dran haue dann bekomm ich cam0 ausgegeben (is ne firewire cam). also was kommt jetz in c an?? bzw was muss ich auswählen wenn ich mir den baustein für ext. bibliotheken konfiguriere..?
hab keine ahnung, ob ihr ansatzweise versteht was ich meine, aber ich lass es mal so stehen
ansonsten erklär ich es gerne nochmal..
bin jetzt soweit, dass ich das bild in nen array zerlegt hab und dann übergebe. hab zwar noch keine ahnung wie ich das wieder zu nem bild mache, aber naja
wenn ich jetzt meine ein/ausgänge in dem knoten für ext bibs konfiguriere, kann ich wenn ich array auswähle diese sachen wählen : 1. array-datenzeiger 2. array handle 3. zeiger auf array-handle..
wenn ich das 1. wähle und mir 2 dimensionen auswähle, funktioniert das schon fast. kann dann aber nur die 1. zeile bearbeiten, LabVIEW erzeugt nämlich diesen c-code : long invert(long bild[], long ausg[]) . bekomme in LabVIEW aber wieder nen 2d array raus.
wie komme ich an die anderen zeilen?
wenn ich array-handle auswähle läuft gar nix, bekomm "__declspec(dllexport) long invert(long bild[], long ausg[]); " dann nich kompiliert..
vll kann mir ja jetz jemand helfen
25.09.2008, 18:35 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2008 21:08 von jg.)
' schrieb:bin jetzt soweit, dass ich das bild in nen array zerlegt hab und dann übergebe. hab zwar noch keine ahnung wie ich das wieder zu nem bild mache, aber naja
Also zu einem IMAQ-Bild bekommst du es nicht mehr (oder nur über Tricks). Denn die Funktionen IMAQ ArrayToImage sind nur im Vision-Paket dabei. Einziger Trick, der mir einfällt: Abspeichern in der DLL als z.B. BMP und dann wieder einlesen. Du kannst ein Array aber zu einem Picture umwandeln. Dazu musst du dich mal in der Graphics&Sound Palette umschauen:
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:wenn ich das 1. wähle und mir 2 dimensionen auswähle, funktioniert das schon fast. kann dann aber nur die 1. zeile bearbeiten, LabVIEW erzeugt nämlich diesen c-code : long invert(long bild[], long ausg[]) . bekomme in LabVIEW aber wieder nen 2d array raus.
wie komme ich an die anderen zeilen?
wenn ich array-handle auswähle läuft gar nix, bekomm "__declspec(dllexport) long invert(long bild[], long ausg[]); " dann nich kompiliert..
Nachtrag zu gestern, ich hab mal in meinen Studien-Zeit-Kenntnissen von C rumgekramt:
Wär mir doch völlig egal, wenn die Definition innerhalb C nur ein 1D-Array erwartet. Schließlich wird nur der Zeiger auf das erste Array-Element übergeben, und dann folgen alle weiteren Element schön brav hintereinander im Speicher (auch bei einem 2D-Array). Somit kommst du über Zeigerarithmetik in C hervorragend an alle Elemente dran, auch wenn's in LabVIEW als 2D-Array definiert ist, also Bsp:
Array 2D in LabVIEW hat Größe (m,n). Du übergibst das als Pointer to Array, und zusätzlich die Größen m & n.
Dann kommst du in C an das Element (i,j) so dran:
Code:
*(array+i*m+j)
oder
*array[i*m+j]
Gruß, Jens
EDIT: Falls ein C-Profi feststellt, dass ich Schmarrn erzählt habe, bitte ich um Korrektur!
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
jau, super, hat funktioniert. vielen dank. musste dann nur noch nen pixmap erstellen und so ne komische farbpalette, die du jemand anderem schon mal erklärt hattest.. also vielen dank auch dafür hätt ich sont auch nich hinbekommen, vernünftige farben wieder herzustellen, kann mit der hilfe von LabVIEW meistens absolut nix anfangen..:)danke
habe bis jetzt immer nur ein bild gemacht und es invertiert. sobald ich aber ne while schleife drum packe, sagt er mir, dass ein ausnahmefehler in meinem code aufgetreten ist.. vermutlich irgendwas mitm speicher??
in dem bild ist jetzt keine schleife drin, aber naja, denkt euch eine
habe bis jetzt immer nur ein bild gemacht und es invertiert. sobald ich aber ne while schleife drum packe, sagt er mir, dass ein ausnahmefehler in meinem code aufgetreten ist.. vermutlich irgendwas mitm speicher??
in dem bild ist jetzt keine schleife drin, aber naja, denkt euch eine
[attachment=42074:while.JPG]
Es wäre eben gerade wichtig, den Screenshot MIT For-Schleife zu sehen. Mglw. hast du nicht aufgepasst und ein AutoIndexing zugelassen.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
hier dann mal mit schleife, eben einfach einmal rum
achso, hab dann mal noch nen bisschen rumprobiert und einfach in den knoten der ext. bibl. noch ne weitere variable eingefügt. einfach nur nen zeiger auf wert.. da meckert der aber direkt beim kompilieren obwohl ich nur *a=*a; mache..
kann man die nicht mehr verändern oder mach ich mal wieder nur nen dummen fehler?
habe eigentlich nie was von einer for-schleife erzählt, damit hast du angefangen
in dem c-code ist eine ja, der ist immer noch wie oben in dem bild.
aber das problem ist, dass wenn ich in LabVIEW die while-schleife rein mache, wie in dem 2.bild, dann kommt eben die fehlermeldung in LabVIEW, dass ein ausnahmefehler aufgetreten ist.. passiert beim 2. durchlauf.. daher der lange timeout..
hab mir mal autoindexing angeguckt. glaub nich, dass das hier das problem ist oder?