1

Through this post I've learned how to make a function to map a colour gradient to an interval of numbers like

redblue = 
Blend[Transpose[{{0.5, 4.1`}, {RGBColor[0.986145, 0, 0.0272526], 
  RGBColor[0, 0.0310826, 0.516304]}}], #1] & 

I tried by reversing the Transpose to create a function to do the very opposite...put in an RGBColor between the original limits and get a number. However it failed miserably.

num = Transpose[{{0.5, 4.1`}, {RGBColor[0.986145, 0, 0.0272526], 
 RGBColor[0, 0.0310826, 0.516304]}}] &

How would one create a function to map RGBColor to a number?

rhermans
  • 36,518
  • 4
  • 57
  • 149
DrMrstheMonarch
  • 2,971
  • 1
  • 10
  • 16

1 Answers1

1
inversecolorfunc[color_RGBColor, function_] := Module[
  {cd},
  cd[val_Real] := 
   ColorDistance[color, ColorData["TemperatureMap"][val]];
  ReplaceAll[
   x,
   Last@NMinimize[{cd[x], 0 <= x <= 1}, {x}]
   ]]

inversecolorfunc[RandomColor[], ColorData["TemperatureMap"]]
(* 0.0684286 *)

inversecolorfunc[RandomColor[], redblue]
(* 0.330163 *)
rhermans
  • 36,518
  • 4
  • 57
  • 149
  • Ah, the function works nicely, though it doesn't retreive a value from the original boundries of 0.5 to 4.1 in redblue....rather only between 0 and 1, – DrMrstheMonarch Aug 13 '18 at 17:53
  • @morbo By default, color gradients have a single parameter that ranges from 0 to 1. You can easily modify the domain NMinimize[{cd[x], 0,5 <= x <= 4.1}, {x}] – rhermans Aug 14 '18 at 09:12