Autor Beitrag
BoBo
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 23.03.06 12:24 
Hallo,

ich habe folgendes Problem. Ich hole mir mit Hilfe eines Framgrabbers ein Bild von einer Kamera und lade es in ein TImage. Jetzt möchte ich allerdings, wenn die Kamera übersteuert, daß heißt Pixel im Bild weiß werden, diese rot einfärben.

Kann ich dies mit scanline erledigen?

Kann ich mit scanline direkt auf das TImage Objekt zurückgreifen, oder muß ich dies erst in ein TBitmap laden?

Kann ich mit scanline auch 8bit Bilder verarbeiten?


Vielen Dank für Eure Antworten

BoBo
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 23.03.06 12:35 
ja auf jeden fall! das ist die beste und schnellste methode ide ich kenne! damit habe ich schon sehr oft gearbeitet.

allerdings solltest du beachten das du das pixelformat des images auf pf24Bit setzt. dadurch hast du dann pro scanline 3 mal so viele bytes wie pixel in einer zeile sind. also pro pixel immer je ein byte für rot, grün und blau.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
BoBo Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 23.03.06 12:46 
Ich nehme allerdings nur 8bit Bilder auf.

Dürfte dann aber ja egal sein wenn es pf24Bit ist, dann sind halt meine rgb werte alle gleich, oder?

Dann werde ich gleich mal drauflostüfteln.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 23.03.06 14:23 
Was deine zweite Frage angeht: Wenn du das Bild in ein TImage lädst, dann hast du es schon in einer TBitmap...
Image1.Picture.Bitmap ist nämlich ein TBitmap-Objekt...

Wenn du allerdings schnell hintereinander Bilder lädst (videomäßig), dann solltest du zunächst ein Hintergrund-Bitmap verändern und dann dieses anzeigen. Das lohnt sich aber nur, wenn das Originalbild direkt dahineingeladen wird.

Mit Assign kannst du ja dann den Inhalt der einen Bitmap in die andere übertragen, und man kann das doch von der Kamera vermutlich auch in ein TBitmap holen, oder?
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 23.03.06 16:11 
Ich bin mir nicht so ganz sicher ob jaenicke das in seinem letzten Satz angedeutet hat. Wenn möglich würde ich an deiner Stelle versuchen das Bild der Kamera DIREKT in ein TBitmap zu laden. Und nicht erst über den Umweg mit einem TImage gehen. Das kostet nur unnötig zeit.

Scanlines: Ja du kannst dasmit auch 8Bit Bilder bearbeiten allerdings musst du dazu erst einmal herrausfinden welcher Wert in dem Bitmap welcher Farbe entspricht. Also müsstest du dir die Farbpalette des Bildes schnappen und schauen welcher Eintrag deiner gesuchten Farbe entspricht. Der Vorteil wäre so, dass jeweils im Bild nur ein Byte vergleichen müsstest und du das Bild vorher nicht konvertieren müsstest. Allerdings könnte es passieren, dass du die Pixel gar nicht rot einfärben könntest, da gar kein Rot in der Palette enthalten wäre.

Ich würde wenn dann aber empfehlen, dass du das Bild in 32 Bit umwandelst. Das umwandeln sollte halbwegs schnell gehen und so kannst du direkt die 4 Pixel des Bildes mit der Farbe vergleichen. Bei 3Bytes würde es nicht direkt gehen, da es keinen 3Bytegroßen ordinalen Datenytpen gibt. So könntest du mit einer Abfragen testen ob di Farbe des Pixels die gesuchte ist. Anstelle bei 24Bit Rot, Grün und Blau jeweils getrennt betrachten zu müssen.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
BoBo Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 23.03.06 18:36 
Hi,

danke für Eure Beiträge. Ich hab es jetzt so gelöst. Ich hole mir das Bild von der Kamera in ein TBitmap (32bit), verändere mit Hilfe von Scanline die gewünschten Pixel und gebe es dann auf dem Bildschirm aus. Funktioniert wunderbar und ich bekomme noch locker 15fps fließend hin.

Also Scanline ist da ja echt richtig fix.


Wenn jemand an dem code interessiert ist, kann ich den morgen noch posten.


BoBo