Post by unknownPer ottenere il codice di un colore, partendo dalle sue componenti RGB,
sapete tutti che si utilizza la funzione RGB() di VBA.
Una volta che si hanno i valori numerici delle componenti RGB, sapete dirmi
qual'è la formula matematica per il calcolo del colore negativo?
--
Ciao Gabriele.
La cosa in realtà non è così semplice...
Cosa intendi per colore Negativo....?
Intendi quello con maggio contrasto rispetto al Colore iniziale...?
La cosa più semplice è questa:
NewColor = BacGroundColor Xor &HFFFFFF
Ma non funziona con le tonalità di grigio medio ed è anche
comprensibile...
Puoi provare con questo è un compromesso accettabile a mio avviso:
NewColor = Not (OldCOLOR Xor &HFF000000)
If Abs(NewColor - OldCOLOR ) < 66000 Then NewColor = vbWhite
La cosa non si risolve lavorando con RGB ma lavorando con HSL e sulla
sfericità del colore...!
Scendendo nel tecnico la sfera colore 3D(HSL) serve sfasarsi dal
colore originale sapendo che in realtà l'angolo sferico non è di 360°
ma di 240°.....!
Quì ti posto qualche cosa che feci qualche tempo fà...
Private Declare Sub ColorRGBToHLS Lib "shlwapi.dll" ( _
ByVal clrRGB As Long, _
pwHue As Integer, _
pwLuminance As Integer, _
pwSaturation As Integer)
Private Declare Function ColorHLSToRGB Lib "shlwapi.dll" ( _
ByVal wHue As Integer, _
ByVal wLuminance As Integer, _
ByVal wSaturation As Integer) As Long
.......
Dim intH As Integer
Dim intL As Integer
Dim intS As Integer
Dim lngRGB As Long
lngRGB = InitColor ' &H808080
Call ColorRGBToHLS(lngRGB, intH, intL, intS)
' Algoritmo di inversione colore....
intH = (intH + 120) Mod 240
intL = (intL + 120) Mod 240
intS = 240
EndColor= ColorHLSToRGB(intH, intL, intS)
Se hai bisogno fammi sapere.
Ciao
@Alex