Link to home
Start Free TrialLog in
Avatar of NiklasMoller
NiklasMoller

asked on

get color in between two other colors

I want to calculate the rgb value for a color IN BETWEEN two other colors. and also I want to be able to define how "close" to color2 the returned color is.
Basically I want to define the two "ends" of a gradient spectrum, and then be able to calculate the color anywhere inbetween.

How do I do this?

example:
color1 = RBG(256,256,256)
color2 = RBG(256, 0, 200)
inBetweenColor = calculateColorInBetween(color1,color2, 0.2)
so in this example I wold want the returned color to be 20% closer to color2 from color1

could you show me a function to do this with any two colors?
thanks!
Avatar of Ingeborg Hawighorst (Microsoft MVP / EE MVE)
Ingeborg Hawighorst (Microsoft MVP / EE MVE)
Flag of New Zealand image

Niklas,

20% closer according to what? Hue? Saturation? Red, green or blue?

There is no definite "in between" for two different colors. You need to define what your "in between" is.

This goes beyond the scope of Excel or Office, into Color Management (with capitals).

The rules and regulations need to be provided by you, then someone here may come up with the required code.

So, what is the RGB value "between" (R256, G256, B256) and (R256, G0, B200)? What color value needs to change by how much to be the "between" value, and what are the rules?

cheers, teylyn
Avatar of NiklasMoller
NiklasMoller

ASKER

ehmmm.... dont know really.. hehe

lets say I want to go from white to yellow.
so all colors in between would be more and more intense yellows... ?

similar to the default color palette in excel where you can choose different intense versions of red, purple, brown etc.

does that help you to understand what Im getting at?
Try this.
Just paste it as code for a sheet and see if the functions in there help.
Function ColorToRGB(ByVal color As Long) As Variant
Dim colorComponents(2) As Integer
colorComponents(0) = color Mod 256
colorComponents(1) = Fix((color Mod 65536) / 256)
colorComponents(2) = Fix(color / 65536)
ColorToRGB = colorComponents
End Function

Function Mix2(ByVal num1 As Long, ByVal num2 As Long, ByVal percent_from1 As Long)
Mix2 = num1 * (100# - percent_from1) / 100# + num2 * percent_from1 / 100#
End Function

Sub x()
color1 = RGB(0, 255, 255)
color2 = RGB(255, 0, 200)
' validate color components
rgb1 = ColorToRGB(color1)
rgb2 = ColorToRGB(color2)
Range(Cells(1, 1), Cells(3, 1)) = rgb1
Range(Cells(4, 1), Cells(6, 1)) = rgb2

' color option 2
color3 = RGB(Mix2(rgb2(0), rgb1(0), perc_closer_to_color2), _
            Mix2(rgb2(1), rgb1(1), perc_closer_to_color2), _
            Mix2(rgb2(2), rgb1(2), perc_closer_to_color2))
' show colors
Cells(1, 3).Interior.color = color1
Cells(2, 3).Interior.color = color2
Cells(3, 3).Interior.color = color3

' from color1 to color2 in 10 steps
Cells(1, 4).Interior.color = color1
For i = 1 To 10
'color3 = Cells(i + 1, 4).Interior.color
color3 = RGB(Mix2(rgb1(0), rgb2(0), i * 10), _
            Mix2(rgb1(1), rgb2(1), i * 10), _
            Mix2(rgb1(2), rgb2(2), i * 10))
Cells(i + 1, 4).Interior.color = color3
Range(Cells(i + 1, 5), Cells(i + 1, 7)) = ColorToRGB(color3)
Next

End Sub

Open in new window

NiklasMoller,

Attached is a file which might help you assess just what you mean or want by way of colours. I'm afraid the file is rather large.

Patrick
colours-interior-colours-02.xls
The attached file is the same but you will need to run the macro to see the results - it takes about 20 seconds on my machine - however the file is much smaller.

Patrick
colours-interior-colours-03.xls
ASKER CERTIFIED SOLUTION
Avatar of NiklasMoller
NiklasMoller

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I could not split the points. some wierd bug in EE, sorry. Thanks for helping me!