Jump to content

Recommended Posts

Hallo Community

 

Ich habe über den BrickViewer Zugriff auch das Thermal Imaging Bricklet und sehe auch ein LiveBild.

Ich habe über Visual Basic .NET Zugriff auf das Bricklet mit der richtigen UID über den USB Anschluss

 

Wie bekomme ich das LiveBild als BMP in die PictureBox?

1. Der ExampleCode hilft mir leider nicht!

-----------ANFANG----------

' Callback subroutine for high contrast image callback

Sub HighContrastImageCB(ByVal sender As BrickletThermalImaging, _ ByVal image As Byte())

' image is an array of size 80*60 with a 8 bit grey value for each element

End Sub

-----------ENDE----------

 

2. Abfrage der 4800 Arrays und mit "bitmap.setpixel" das PictureBox-Bild pixel-weise zusammenzusetzen scheint mir sehr umständlich!

 

Ziel:

1. LiveBild > PictureBox

2. Color Palette = HotCold

Share this post


Link to post
Share on other sites

Moin,

Du wirst vermutlich nicht darum herum kommen, das Bild pixelweise zu bauen, du kannst aber, damit es schneller läuft (Falls die Performance ein Problem sein sollte) mit Bitmap.LockBits arbeiten. Die Hot-Cold-Palette im Brick Viewer ist recht simpel aufgebaut: Alle Werte kleiner als 33 sind Cold (also RGB 0, 0, 255), alle über 223 heiß (also RGB 255, 0, 0).

Share this post


Link to post
Share on other sites

Hallo!

Danke für die Info, da komme ich schon etwas weiter.

Das Auslesen der 4800 Arrays dauert mit .GetTemperatureImage(1) und .GetTemperatureImage(2) u.s.w.  eine Ewigkeit!

 

Scheinbar ist der CallBack-Ansatz besser.

Leider habe ich diesen Ansatz noch nicht verstanden?

 

Hast Du eine einfache Erklärung für mich?

 

Share this post


Link to post
Share on other sites
15 hours ago, MBOB said:

Das Auslesen der 4800 Arrays dauert mit .GetTemperatureImage(1) und .GetTemperatureImage(2) u.s.w.  eine Ewigkeit!

Wenn du das Bild, was dir GetTemperatureImage zurückgibt nicht in einer Variable zwischenspeicherst, wird bei jeder Pixelabfrage mit .GetTemperatureImage(x) das ganze Bild neu abgerufen. Das Bricklet muss dann für jeden Pixel das ganze Bild schicken, es schafft aber nur ungefähr 4 Bilder pro Sekunde, deshalb dauert das dann 1200 Sekunden pro Bild. Du kannst mal folgendes versuchen:

Dim img as Byte() = ti.GetHighContrastImage()

und dann immer mit img(x) die Pixel lesen.

 

15 hours ago, MBOB said:

Scheinbar ist der CallBack-Ansatz besser.

Leider habe ich diesen Ansatz noch nicht verstanden?

 

Hast Du eine einfache Erklärung für mich?

Der Callback-Ansatz ist schneller, weil das Bricklet dann von sich aus Daten schicken darf. Damit sollten bis zu 9 Bilder pro Sekunde möglich sein. Es gibt hier ein Beispiel. Durch den SetImageTransferConfig wird dem Bricklet mitgeteilt, dass es Callbacks schicken darf. Die Zeile

AddHandler ti.HighContrastImageCallback, AddressOf HighContrastImageCB

registriert den Sub HighContrastImageCB als die Funktion die (automatisch) ausgeführt werden soll, wenn ein neues Bild ankommt. Du kannst dann in dem Sub (nach dem "image is an array of ..." Kommentar) das Bild aus dem image-Parameter auslesen und in die PictureBox schreiben.

Share this post


Link to post
Share on other sites

Danke; bin einen Schritt weiter!

 

Der IMAGE-Parameter ist eine Byte-Variable.

Meine BITMAP-Variable ist eine Bitmap-Variable.

 

Daher kann ich IMAGE nicht nach BITMAP kopieren!

 

Ist hier die BIT-weise Befüllung des BITMAPs notwendig oder gibt es da noch eine Abkürzung / Vereinfachung?

Share this post


Link to post
Share on other sites

Du musst die Bitmap byte-weise befüllen: Ein Pixel im Thermal-Bild ist nicht ein Bit sondern ein Byte. Ob du den Wert dann als cold/nichts/hot betrachtest hängt von deiner Farbpalette ab. Im Brick Viewer sind es 0-32 -> cold, 33 -> 222 -> schwarz, 223-255 -> hot.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...