Hola pato te paso una funcion que suelo usar esta lo que hace combina dos colores con un tercer parametro que es para decir cuanto de uno y cuanto de otro en un rango de 0 a 255 ahora bien suponete que tenes un color rojo y lo combinas con el blanco y le das una pequeño porcentaje logras aclarar el rojo y si lo mesclas con negro se oscurece, asi que te va a servir con tu proposito
Option Explicit
Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, ByVal lColorRef As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'Funcion para combinar dos colores
Private Function ShiftColor(ByVal clrFirst As Long, ByVal clrSecond As Long, ByVal lAlpha As Long) As Long
Dim clrFore(3) As Byte
Dim clrBack(3) As Byte
OleTranslateColor clrFirst, 0, VarPtr(clrFore(0))
OleTranslateColor clrSecond, 0, VarPtr(clrBack(0))
clrFore(0) = (clrFore(0) * lAlpha + clrBack(0) * (255 - lAlpha)) / 255
clrFore(1) = (clrFore(1) * lAlpha + clrBack(1) * (255 - lAlpha)) / 255
clrFore(2) = (clrFore(2) * lAlpha + clrBack(2) * (255 - lAlpha)) / 255
CopyMemory ShiftColor, clrFore(0), 4
End Function
Private Sub Form_Load()
Me.BackColor = vbRed
Picture1.BackColor = ShiftColor(Me.BackColor, vbWhite, 200) ' este aclara.
'Picture1.BackColor = ShiftColor(Me.BackColor, vbBlack, 200) ' este oscurece.
End Sub