| Zitat: |
| is alles sehr schon aber wie oben schon geschreiben... ich versteh das nicht |
Nun, etwas genauer insofern was du nicht verstehst? Ich denk mir mal es ist folgendes:
[quote="FlameDiver"]
aber was heißt bzw bewirkt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| begin b:=c shr 16; g:=c shr 8; r:=c; c:=(255-b) shl 16 +(255-g) shl 8 +255-r; |
[/delphi]
Ok, Ich versuchs zu erklaeren. Ein integer ist genau genommen ein Dword und besteht aus 4 bytes und jedes byte hat 8 bits. Ein Dword sieht folgendermassen aus:
00 00 00 00
Joerg definierte r,g und b als bytes so dass diese jede fuer sich die momentane grundfarbe speichern.
Eine Farbe definiert sich folgendermassen:
Quelltext
1: 2:
| Opazitaet - blau - gruen - rot 00 - 00 - 00 - 00 |
um nun blau aus der farbe herauszutrennen so shiftet er das dritte byte von links nach rechts ( b:=c shr 16;) so dass es im unterem byte landet und dann schreibt er dies in b.
Quelltext
1: 2: 3:
| Ein shr 16 shiftet 2 x 8 bits (2 bytes) nach rechts davor: 00 12 CD 25 danach: 00 00 00 12 |
Und er verfaehrt genauso mit den anderen beiden bytes. ( g:=c shr 8; r:=c; )
Um nun das gegendteil der farbe zu bekommen so setzt er die farbe wieder zusammen (c:=(255-b) shl 16 +(255-g) shl 8 +255-r

mit dem absoluten gegendteil jeder grundfarbe. Dazu substrahiert er von rot 255 da es bloss 255 moeglische farbkombinationen per byte ergeben (255 ist FF in hexadezimal) Beispiel: -128 -> +128 moegliche farbkombinationen. Nehme man 186 - 255 = -69 komplimentier farbe fuer 186. Danach shiftet er jede farbe wieder auf die Stelle auf die sie gehoert (fuer blau 2 bytes nach links - 16 bits - shl 16 und so weiter).
Blackbird hat nun xor vorgeschlagen - und wenn man ein integer mit -1 xor-ed so verhaelt es sich so dass das gesamte dword umgekehrt wird, also das gleich wie jede farbe einzeln zu nehmen und von ihr 255 abzuziehen.
Doch brauchen wir das gesamte dword nicht sondern bloss die drei grundfarben deshalb xor-ed er es auch bloss nur mit $00FFFFFF und laesst das obere byte bestehen.
Kurz: farbe = farbe xor $00FFFFFF ist das gleiche als wenn man jede grundfarbe auf die komplimentaer farbe umstellt sprich umkehren wuerde.