<div dir="ltr"><div>Hi to all</div><div><br></div><div>I am writing here to ask you to give a look at a library I developed recently that aims at working with ICC profiles in a 'strongly typed' way.</div><div><br></div><div>Basically the library defines a few types for color spaces (like xyz_t, lab_t, a template rgb_t<T>). Then a profile (or also a transform) is represented by a class like </div><div><br></div><div>function_t<lab_t, rgb_t<double>> f(..);</div><div><br></div><div>This 'function_t' can be evaluated in this way:</div><div><br></div><div>rgb_t<double> rgb = {0., 0.3, 0.4} ;</div><div>lab_t lab = f(rgb) ;</div><div><br></div><div>but can also be composed , like this:</div><div><br></div><div>function_t<rgb_t<double>> g(...) ;</div><div>function_t<rgb_t<double>, rgb_t<double>> h = f * g ;</div><div>rgb_t<double> rgb1 = h(rgb) ; </div><div><br></div><div>The library is not complete but already does several things, like loading AToB, BToA, Lut8 and Lut16 tag types. Is still missing the multi processing element. </div><div><br></div><div>Another interesting feature (or at lest something I would sell as such) is the tetrahedral interpolation used for multi-dimensional LUTs. The interesting part lies in the fact that the algorithm is generalized for input dimensions bigger than three.</div><div><br></div><div>But it's time to give some links:</div><div>Here you get the code:</div><div><br></div><div><a href="https://github.com/marco-o/LIBICCPP">https://github.com/marco-o/LIBICCPP</a></div><div><br></div><div>and here there is an attempt at giving an insight about what's going on inside:</div><div><br></div><div><a href="https://libiccpp.wordpress.com/">https://libiccpp.wordpress.com/</a></div><div><br></div><div>That's all. Comments, suggestions, hints etc are welcome!</div><div><br></div><div>  Marco</div></div>