Entwickler-Ecke
Multimedia / Grafik - Rot Grün Blau und Helligkeitsanteil eines Pixels erkennen
Xadron - Fr 10.10.08 20:04
Titel: Rot Grün Blau und Helligkeitsanteil eines Pixels erkennen
Ich wollte von einem bestimmten Pixel der X und Y Coordinate die Helligkeit sowie den Blau, Grün und Rotanteil in eine bestimmte integer wie z.b. H, G, B, R, schreiben lassen. Dabei soll für das Maximum 255 bzw für das minimum 0 darin stehen.
Soetwas habe ich noch nie gemacht. Hat jemand einen guten Tipp, bzw ein Codefetzen, der das machen kann?
Danke für eure Hilfe
Yogu - Fr 10.10.08 20:18
Arbeitest du mit
TCanvas? Dort gibt es zwei Möglichkeiten:
Canvas.Pixels und
Canvas.ScanLine. Die erste erkläre ich kurz, für die zweite schaust du bitte in der Delphi-Hilfe nach. Sie ist zwar etwas komplizierter, aber auch sehr viel performanter.
Canvas.Pixels:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var PixelColor: TColor; R, G, B, H: Byte; begin PixelColor := Canvas.Pixels[X, Y];
R := (PixelColor and $00FF0000) div $10000; G := (PixelColor and $0000FF00) div $100; B := (PixelColor and $000000FF);
H := (R + G + B) div 3; end; |
Edit:: Ich bin beim Kopieren und Umschreiben mit der Delphi-Hilfe durcheinandergekommen, und da ist wohl etwas schief gelaufen. Wie
Jakob_Ullmann ganz richtig bemerkt, sind die Rot- und Blauwerte in Delphi genau andersherum.
Moderiert von
Narses: Delphi-Tag repariert
Narses - Fr 10.10.08 20:19
Moin!
Schau mal hier [
http://www.delphi-forum.de/viewtopic.php?t=44140], damit solltst du weiter kommen. ;)
@
Yogu:
Yogu hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| R := (PixelColor and $00FF0000) div $10000; G := (PixelColor and $0000FF00) div $100; B := (PixelColor and $000000FF); | |
Ich würde die Werte erst mit SHR schieben und dann mit $FF maskieren, ist IMHO sicher besser (und performanter bei sehr vielen Operationen), als das mit einer Division zu machen. :idea:
Yogu hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3:
| H := (R + G + B) div 3; end; | |
Die Helligkeit der Grundfarben ist nicht gleich gewichtet, schau mal in den gelinkten Thread. :les: ;)
cu
Narses
Jakob_Ullmann - Fr 10.10.08 20:36
In Delphi ist das nicht $00RRGGBB, sondern $00BBGGRR. :wink:
Xadron - Fr 10.10.08 22:36
Das ist eig. genau das was ich gesucht habe. danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!