  B4J Question [Solved:distance to color values]...

Discussion in 'B4J Questions' started by rbghongade, Apr 18, 2019.

1. Dear friends, how to convert distance into color values? The application is to plot distance values to spatial coordinates with color coding.

2. Code:
Sub InterpolateColor(StartClr As Int, EndClr As Int, Fraction As Float) As Int

Dim clr As Int

For i = 0 To 3

Dim shift As Int = 8 * i

Dim src As Int = Bit.UnsignedShiftRight(Bit.And(StartClr, Bit.ShiftLeft(0xff, shift)), shift)

Dim target As Int = Bit.UnsignedShiftRight(Bit.And(EndClr, Bit.ShiftLeft(0xff, shift)), shift)
clr = clr +
Bit.ShiftLeft(Max(0Min(255, src + (target - src) * Fraction)), shift)

Next

Return clr
End Sub
Usage example:
Code:
Dim x As B4XView = MainForm.RootPane
For i = 0 To 100
x.Color = InterpolateColor(xui.Color_Green, xui.Color_Magenta, i /
100)
Sleep(
30)
Next

3. Wow , that was fast.
Actually I am using the following to draw points:
Code:
cvs1.DrawCircle(i,j,3,fx.Colors.Blue,True,1)
where I want "fx.Colors.Blue" to be replaced by the mapped color!
Apologies for a naive question.

4. Switch to B4XCanvas. It uses integers (same as in B4A and B4i) instead of the color objects.

5. I did switch to B4XCanvas following is my code:
Code:
Dim v As B4XView =Pane2

For i=0 To 350 Step 20

For j=0 To 500 Step 20
v.Color = InterpolateColor(xui.Color_red, xui.Color_blue,
Rnd(0,100)/ 100)
cvs1.DrawCircle(i,j,
5,v.Color,True,1)

Next

Next
But the pane2 color also changes and I expect only the circle color should change!

PS:My bad I fixed it!

6. The code is great, but still only two colors and their combinations are available. It would be great if more colors can be made available.

7. The code I posted does a linear interpolation between two colors. I'm not sure what you mean with more colors. You can split the distance into several sections and add more colors (red to green and then green to blue for example).