Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA)

Beitrag von Derren »

Hier mal zwei Macros, die die Arbeit mit Hex Farbcodes vielleicht ein wenig erleichtern.
Das erste ist eigentlich eher Spielerei, da es wahrscheinlich länger dauert das Macro aufzurufen, als einfach den korrekten Hex-Wert zu tippen.
In CSS kann man jedenfalls Farben als 3-wertigen Hex-Wert angeben. Der Interpreter expandiert die Werte, in dem gegebene Wert für die 1er und 16er Stelle verwendet wird. Kurz, aus $ABC wird $AABBCC

Das zweite könnte für die Web-Erfahrenen schon eher interessant sein. Es sorgt dafür, dass der Rot-Wert vorne und der Blau-Wert hinten steht.
D.h. $FF0000 ist endlich rot, wie man es gewohnt ist :D

Code: Alles auswählen

Macro colorExpand(_in_, _out_)	
	b = _in_>>8			
	g = (_in_>>4)%16	
	r = (_in_)%16
	
	b=b<<4 + b
	g=g<<4 + g
	r=r<<4 + r
	
	_out_ = b<<16 + g<<8 + r	
EndMacro 

a = $AB9
colorExpand(a, c)
Debug "colorExpand($"+Hex(a)+"): $"+Hex(c)
 


Macro colorInvert(_in_, _out_)
	b = _in_>>16			
	g = (_in_>>8)%$100	
	r = (_in_)%$100	
	_out_ = r<<16 + g<<8 + b	
EndMacro 

Debug "  "
a = $509CF3
colorInvert(a, c)
Debug "HTML Color: $"+Hex(a)
Debug "Red: $"+Hex(Red(c))
Debug "Grn: $"+Hex(Green(c))
Debug "Blu: $"+Hex(Blue(c))
Signatur und so
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Beitrag von NicTheQuick »

Das finde ich als Macro ehrlich gesagt etwas unpraktisch. Vor allem, weil die Variablen r, g und b benutzt, aber nie definiert werden. Und wenn man im Programmverlauf zufällig Variablen mit diesem Namen benutzt, z.B. r als String, dann geht's gar nicht mehr. Mal davon abgesehen, dass das Macro dann einfach r überschreiben würde.

Meine Empfehlung wäre deshalb eher auf eine Procedure zu wechseln.
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Beitrag von Derren »

Danke für den Tipp. :allright:
Ja, die Variablennamen müsste man wenn dann irgendwie "unique" machen "myMacro_colorInvert_ValueOfRed" oder so ein Kram.

Im Sinne der Kapselung gefallen mir Prozeduren auch wesentlich besser, zumal ich dann einfach etwas zurückgeben kann und keine "by Reference" Variable brauche.
Signatur und so
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Beitrag von Nino »

Code: Alles auswählen

Macro ColorInvert (_in_)
   RGB(Blue(_in_), Green(_in_), Red(_in_))
EndMacro

Debug Hex(ColorInvert($123456))   ; => 563412
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Beitrag von GPI »

Code: Alles auswählen

Macro colorExpand(_in_)   
  ((_in_>>8)*$110000+ ((_in_>>4)&$F)*$1100+ ((_in_)&$F)*$11)  
EndMacro 

a = $AB9
c= colorExpand(a)
Debug "colorExpand($"+Hex(a)+"): $"+Hex(c)
Und es dürfte schneller gehen, wenn du statt % die UND-Verknüpfung & wählst.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Beitrag von udg »

zwar nicht als PB Code aber da kann ich das hier anbieten. Ich habe mir das Tool programmiert weil die verdrehten Color Werte nerven :D

http://www.purebasic.fr/german/viewtopi ... 10&t=29644
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten