TImage - short-Array als Bild zeigen



  • Mahlzeit!

    Wir haben hier mal wieder ein Problem:
    Wir haben ein Bild in einem Buffer gespeichert. Der Buffer ist ein Array vom Typ unsigned short (!!!) und der grösse von 2x [1024*1024]
    also: unsigned short buffer[2][1048576].

    Wir müssen irgendwie das Bild (bzw. beide Halbbilder) in ein TImage kriegen.
    Jemand eine Idee?



  • Per TCanvas::Pixels (einfach aber langsam) oder per TBitmap::ScanLine (aufwendiger aber schneller) den Inhalt des jeweiligen Array-Elementes an den entsprechenden Bildpunkt übergeben.



  • Jansen schrieb:

    Per TCanvas::Pixels (einfach aber langsam) oder per TBitmap::ScanLine (aufwendiger aber schneller) den Inhalt des jeweiligen Array-Elementes an den entsprechenden Bildpunkt übergeben.

    Ja, mit scanline haben wir es versucht. aber bei scanline ist das ja ein char*, wobei immer 3 "chars" ein Pixel ergeben (RGB), richtig?!
    Wir haben aber ein short*-Array, bei dem ein short-Wert alle 3 RGB-Werte beinhaltet. (Unser Bild soll ein Greyscale-Bild sein, also alle RGB-werte sind gleich und liegen zwischen 0 und 255. Unsere Short-Werte liegen aber z.B. bei 1023).



  • Dann ist an euren Daten irgendwas faul. Bildwerte liegen immer zwischen 0 und 255, ob nun einmal pro Bildpunkt (für 8bit / 256 Farben bzw. Greyscale) oder dreimal pro Bildpunkt (für 24bit / 16,7 Mio).

    Wo kommen die Daten denn her?



  • Die Daten kriegen wir von einer Framegrabberkarte (direkt aus einer Treiberfunktion). Die will ein short*-Array haben. genauer kann ichs leider nich sagen, weil die funtionen in einer dll sind und da reinzugucken könnte schwierig werden 😉



  • So! Habs gelöst!
    Die Grauwerte liegen zwischen 0 und 1023, weils ne 10Bit-Kamera ist.
    Deshalb auch short-Werte.
    Ich hab die jetzt einfach bei der Zuweisung umgewandelt (durch 4 geteilt) und die so auf 8Bit "konvertiert".


Anmelden zum Antworten