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".