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

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

  1. rbghongade

    rbghongade Active Member Licensed User

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

    Erel Administrator Staff Member Licensed User

    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. rbghongade

    rbghongade Active Member Licensed User

    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. Erel

    Erel Administrator Staff Member Licensed User

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

    rbghongade Active Member Licensed User

    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. rbghongade

    rbghongade Active Member Licensed User

    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. Erel

    Erel Administrator Staff Member Licensed User

    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).
     
    rbghongade likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice