Code: Alles auswählen
/*============================================================================
$Function: TransformColor(nColor, nProz)
$Group: 4
$Author: Marcus Herz
$Topic: RGB Farbwert aufhellen oder abdunkeln
$Description: Ein RGB Farbwert kann damit um einen Prozentfaktor aufgehellt oder abgedunkelt werden.
$Argument: nColor RGB Farbwert, z.B. von GraMakeRGBColor()
$Argument: nProz Prozentwert, kleiner 0 = aufhellen, größer 0 = abdunkeln
$Return: nRgbColor
$See Also:
$Example:
// helle Farbe als Hintergrund, abgedunkelte Farbe, wenn sich Cursor in der Zelle befindet
oCol :ColorBlock := {|x,oB,oC| {,GraMakeRGBColor({100,200,45}),,TransformColor(GraMakeRGBColor({100,200,45}),-10)}}
? TransformColor(GraMakeRGBColor({100,200,45}),-10) // entspricht Farbwert {110,220,50}, aber ist heller
// volles rot, aufhellen
? TransformColor(GraMakeRGBColor({255, 0, 0 }), -10) // entspricht Farbwert {255,26,26}, heller
? TransformColor(GraMakeRGBColor({255, 0, 0 }), -100) // entspricht Farbwert {255,255,255}, weiss
==============================================================================*/
FUNC TransformColor(nColor, nProz)
LOCAL nGreen, nBlue, nRed
if band(nColor, 0x1000000 ) = 0 // keine RGB Farbe
RETURN nColor
elseif nProz == 0
RETURN nColor
elseif nProz >= 100
RETURN GraMakeRGBColor({0,0,0})
elseif nProz <= -100
RETURN GraMakeRGBColor({255,255,255})
endif
nRed := band(nColor, 0xFF)
nGreen := band(nColor, 0xFF00)
nBlue := band(nColor, 0xFF0000)
nGreen /= 2**8
nBlue /= 2**16
nProz *= -1 // vorzeichen umdrehen > 255,255,255 ist weiss
if nRed == 0
if nProz > 0
nRed := 255 * nProz / 100
endif
else
nRed := max(0, nRed + nRed * nProz / 100)
endif
if nGreen == 0
if nProz > 0
nGreen:= 255 * nProz / 100
endif
else
nGreen := max(0, nGreen + nGreen * nProz / 100)
endif
if nBlue == 0
if nProz > 0
nBlue := 255 * nProz / 100
endif
else
nBlue := max(0, nBlue + nBlue * nProz / 100)
endif
nColor := min(255, int(nRed))
nColor += min(255, int(nGreen)) * 2**8
nColor += min(255, int(nBlue)) * 2**16
nColor := bor(nColor, 0x1000000) // xbase bit setzen
RETURN nColor