2156 int nVerboseness,
bool bUseLegacy)
2158 icChar szOutText[200000], szColor[40];
2161 sprintf(szOutText,
"BEGIN_LUT %s %d %d\n",
szName, m_nInput, m_nOutput);
2162 sDescription += szOutText;
2164 if (nVerboseness > 75) {
2166 for (i=0; i<m_nInput; i++) {
2168 sprintf(szOutText,
" %s=%d", szColor, m_GridPoints[i]);
2169 sDescription += szOutText;
2172 sDescription +=
" ";
2174 for (i=0; i<m_nOutput; i++) {
2176 sprintf(szOutText,
" %s", szColor);
2177 sDescription += szOutText;
2180 sDescription +=
"\n";
2182 if (nVerboseness > 75) {
2184 for (i=0; i<m_nInput; i++) {
2186 len += strlen(szColor);
2188 for (i=0; i<m_nOutput; i++) {
2190 len += strlen(szColor);
2192 len += m_nInput + m_nOutput + 6;
2194 sDescription.reserve(sDescription.size() + NumPoints()*len);
2197 m_csInput = csInput;
2198 m_csOutput = csOutput;
2199 m_pOutText = szOutText;
2201 memset(m_GridAdr, 0, 16);
2203 Iterate(sDescription, 0, 0, bUseLegacy);
2221 for (i=0; i<m_nInput; i++) {
2222 m_MaxGridPoint[i] = m_GridPoints[i] - 1;
2224 m_nNodes = (1<<m_nInput);
2227 delete [] m_nOffset;
2232 m_nOffset[0] = n000 = 0;
2233 m_nOffset[1] = n001 = m_DimSize[0];
2235 else if (m_nInput==2) {
2236 m_nOffset[0] = n000 = 0;
2237 m_nOffset[1] = n001 = m_DimSize[0];
2238 m_nOffset[2] = n010 = m_DimSize[1];
2239 m_nOffset[3] = n011 = n001 + n010;
2241 else if (m_nInput==3) {
2242 m_nOffset[0] = n000 = 0;
2243 m_nOffset[1] = n001 = m_DimSize[0];
2244 m_nOffset[2] = n010 = m_DimSize[1];
2245 m_nOffset[3] = n011 = n001 + n010;
2246 m_nOffset[4] = n100 = m_DimSize[2];
2247 m_nOffset[5] = n101 = n100 + n001;
2248 m_nOffset[6] = n110 = n100 + n010;
2249 m_nOffset[7] = n111 = n110 + n001;
2251 else if (m_nInput == 4) {
2253 m_nOffset[ 1] = n001 = m_DimSize[ 0];
2254 m_nOffset[ 2] = n010 = m_DimSize[ 1];
2255 m_nOffset[ 3] = m_nOffset[ 2] + m_nOffset[ 1];
2256 m_nOffset[ 4] = n100 = m_DimSize[ 2];
2257 m_nOffset[ 5] = m_nOffset[ 4] + m_nOffset[ 1];
2258 m_nOffset[ 6] = m_nOffset[ 4] + m_nOffset[ 2];
2259 m_nOffset[ 7] = m_nOffset[ 4] + m_nOffset[ 3];
2260 m_nOffset[ 8] = n1000 = m_DimSize[ 3];
2261 m_nOffset[ 9] = m_nOffset[ 8] + m_nOffset[ 1];
2262 m_nOffset[10] = m_nOffset[ 8] + m_nOffset[ 2];
2263 m_nOffset[11] = m_nOffset[ 8] + m_nOffset[ 3];
2264 m_nOffset[12] = m_nOffset[ 8] + m_nOffset[ 4];
2265 m_nOffset[13] = m_nOffset[ 8] + m_nOffset[ 5];
2266 m_nOffset[14] = m_nOffset[ 8] + m_nOffset[ 6];
2267 m_nOffset[15] = m_nOffset[ 8] + m_nOffset[ 7];
2269 else if (m_nInput == 5) {
2271 m_nOffset[ 1] = n001 = m_DimSize[ 0];
2272 m_nOffset[ 2] = n010 = m_DimSize[ 1];
2273 m_nOffset[ 3] = m_nOffset[ 2] + m_nOffset[ 1];
2274 m_nOffset[ 4] = n100 = m_DimSize[ 2];
2275 m_nOffset[ 5] = m_nOffset[ 4] + m_nOffset[ 1];
2276 m_nOffset[ 6] = m_nOffset[ 4] + m_nOffset[ 2];
2277 m_nOffset[ 7] = m_nOffset[ 4] + m_nOffset[ 3];
2278 m_nOffset[ 8] = n1000 = m_DimSize[ 3];
2279 m_nOffset[ 9] = m_nOffset[ 8] + m_nOffset[ 1];
2280 m_nOffset[10] = m_nOffset[ 8] + m_nOffset[ 2];
2281 m_nOffset[11] = m_nOffset[ 8] + m_nOffset[ 3];
2282 m_nOffset[12] = m_nOffset[ 8] + m_nOffset[ 4];
2283 m_nOffset[13] = m_nOffset[ 8] + m_nOffset[ 5];
2284 m_nOffset[14] = m_nOffset[ 8] + m_nOffset[ 6];
2285 m_nOffset[15] = m_nOffset[ 8] + m_nOffset[ 7];
2286 m_nOffset[16] = n10000 = m_DimSize[ 4];
2287 m_nOffset[17] = m_nOffset[16] + m_nOffset[ 1];
2288 m_nOffset[18] = m_nOffset[16] + m_nOffset[ 2];
2289 m_nOffset[19] = m_nOffset[16] + m_nOffset[ 3];
2290 m_nOffset[20] = m_nOffset[16] + m_nOffset[ 4];
2291 m_nOffset[21] = m_nOffset[16] + m_nOffset[ 5];
2292 m_nOffset[22] = m_nOffset[16] + m_nOffset[ 6];
2293 m_nOffset[23] = m_nOffset[16] + m_nOffset[ 7];
2294 m_nOffset[24] = m_nOffset[16] + m_nOffset[ 8];
2295 m_nOffset[25] = m_nOffset[16] + m_nOffset[ 9];
2296 m_nOffset[26] = m_nOffset[16] + m_nOffset[10];
2297 m_nOffset[27] = m_nOffset[16] + m_nOffset[11];
2298 m_nOffset[28] = m_nOffset[16] + m_nOffset[12];
2299 m_nOffset[29] = m_nOffset[16] + m_nOffset[13];
2300 m_nOffset[30] = m_nOffset[16] + m_nOffset[14];
2301 m_nOffset[31] = m_nOffset[16] + m_nOffset[15];
2303 else if (m_nInput == 6) {
2305 m_nOffset[ 1] = n001 = m_DimSize[ 0];
2306 m_nOffset[ 2] = n010 = m_DimSize[ 1];
2307 m_nOffset[ 3] = m_nOffset[ 2] + m_nOffset[ 1];
2308 m_nOffset[ 4] = n100 = m_DimSize[ 2];
2309 m_nOffset[ 5] = m_nOffset[ 4] + m_nOffset[ 1];
2310 m_nOffset[ 6] = m_nOffset[ 4] + m_nOffset[ 2];
2311 m_nOffset[ 7] = m_nOffset[ 4] + m_nOffset[ 3];
2312 m_nOffset[ 8] = n1000 = m_DimSize[ 3];
2313 m_nOffset[ 9] = m_nOffset[ 8] + m_nOffset[ 1];
2314 m_nOffset[10] = m_nOffset[ 8] + m_nOffset[ 2];
2315 m_nOffset[11] = m_nOffset[ 8] + m_nOffset[ 3];
2316 m_nOffset[12] = m_nOffset[ 8] + m_nOffset[ 4];
2317 m_nOffset[13] = m_nOffset[ 8] + m_nOffset[ 5];
2318 m_nOffset[14] = m_nOffset[ 8] + m_nOffset[ 6];
2319 m_nOffset[15] = m_nOffset[ 8] + m_nOffset[ 7];
2320 m_nOffset[16] = n10000 = m_DimSize[ 4];
2321 m_nOffset[17] = m_nOffset[16] + m_nOffset[ 1];
2322 m_nOffset[18] = m_nOffset[16] + m_nOffset[ 2];
2323 m_nOffset[19] = m_nOffset[16] + m_nOffset[ 3];
2324 m_nOffset[20] = m_nOffset[16] + m_nOffset[ 4];
2325 m_nOffset[21] = m_nOffset[16] + m_nOffset[ 5];
2326 m_nOffset[22] = m_nOffset[16] + m_nOffset[ 6];
2327 m_nOffset[23] = m_nOffset[16] + m_nOffset[ 7];
2328 m_nOffset[24] = m_nOffset[16] + m_nOffset[ 8];
2329 m_nOffset[25] = m_nOffset[16] + m_nOffset[ 9];
2330 m_nOffset[26] = m_nOffset[16] + m_nOffset[10];
2331 m_nOffset[27] = m_nOffset[16] + m_nOffset[11];
2332 m_nOffset[28] = m_nOffset[16] + m_nOffset[12];
2333 m_nOffset[29] = m_nOffset[16] + m_nOffset[13];
2334 m_nOffset[30] = m_nOffset[16] + m_nOffset[14];
2335 m_nOffset[31] = m_nOffset[16] + m_nOffset[15];
2336 m_nOffset[32] = n100000 = m_DimSize[5];
2337 m_nOffset[33] = m_nOffset[32] + m_nOffset[ 1];
2338 m_nOffset[34] = m_nOffset[32] + m_nOffset[ 2];
2339 m_nOffset[35] = m_nOffset[32] + m_nOffset[ 3];
2340 m_nOffset[36] = m_nOffset[32] + m_nOffset[ 4];
2341 m_nOffset[37] = m_nOffset[32] + m_nOffset[ 5];
2342 m_nOffset[38] = m_nOffset[32] + m_nOffset[ 6];
2343 m_nOffset[39] = m_nOffset[32] + m_nOffset[ 7];
2344 m_nOffset[40] = m_nOffset[32] + m_nOffset[ 8];
2345 m_nOffset[41] = m_nOffset[32] + m_nOffset[ 9];
2346 m_nOffset[42] = m_nOffset[32] + m_nOffset[10];
2347 m_nOffset[43] = m_nOffset[32] + m_nOffset[11];
2348 m_nOffset[44] = m_nOffset[32] + m_nOffset[12];
2349 m_nOffset[45] = m_nOffset[32] + m_nOffset[13];
2350 m_nOffset[46] = m_nOffset[32] + m_nOffset[14];
2351 m_nOffset[47] = m_nOffset[32] + m_nOffset[15];
2352 m_nOffset[48] = m_nOffset[32] + m_nOffset[16];
2353 m_nOffset[49] = m_nOffset[32] + m_nOffset[17];
2354 m_nOffset[50] = m_nOffset[32] + m_nOffset[18];
2355 m_nOffset[51] = m_nOffset[32] + m_nOffset[19];
2356 m_nOffset[52] = m_nOffset[32] + m_nOffset[20];
2357 m_nOffset[53] = m_nOffset[32] + m_nOffset[21];
2358 m_nOffset[54] = m_nOffset[32] + m_nOffset[22];
2359 m_nOffset[55] = m_nOffset[32] + m_nOffset[23];
2360 m_nOffset[56] = m_nOffset[32] + m_nOffset[24];
2361 m_nOffset[57] = m_nOffset[32] + m_nOffset[25];
2362 m_nOffset[58] = m_nOffset[32] + m_nOffset[26];
2363 m_nOffset[59] = m_nOffset[32] + m_nOffset[27];
2364 m_nOffset[60] = m_nOffset[32] + m_nOffset[28];
2365 m_nOffset[61] = m_nOffset[32] + m_nOffset[29];
2366 m_nOffset[62] = m_nOffset[32] + m_nOffset[30];
2367 m_nOffset[63] = m_nOffset[32] + m_nOffset[31];
2377 for (count=0; count<m_nInput; count++) {
2378 m_nPower[count] = (1<<(m_nInput-1-count));
2384 if (j == nPower[1]) {
2385 m_nOffset[j] = m_DimSize[count];
2386 nPower[0] = (1<<count);
2388 nPower[1] = (1<<count);
2392 m_nOffset[j] = m_nOffset[nPower[0]] + m_nOffset[nFlag];
2820 icFloatNumber *p = &m_pData[ig0*n001 + ig1*n010 + ig2*n100 + ig3*n1000 + ig4*n10000];
2825 dF[ 0] = ns0 * ns1 * ns2 * ns3 * ns4;
2826 dF[ 1] = ns0 * ns1 * ns2 * ns3 * s4;
2827 dF[ 2] = ns0 * ns1 * ns2 * s3 * ns4;
2828 dF[ 3] = ns0 * ns1 * ns2 * s3 * s4;
2829 dF[ 4] = ns0 * ns1 * s2 * ns3 * ns4;
2830 dF[ 5] = ns0 * ns1 * s2 * ns3 * s4;
2831 dF[ 6] = ns0 * ns1 * s2 * s3 * ns4;
2832 dF[ 7] = ns0 * ns1 * s2 * s3 * s4;
2833 dF[ 8] = ns0 * s1 * ns2 * ns3 * ns4;
2834 dF[ 9] = ns0 * s1 * ns2 * ns3 * s4;
2835 dF[10] = ns0 * s1 * ns2 * s3 * ns4;
2836 dF[11] = ns0 * s1 * ns2 * s3 * s4;
2837 dF[12] = ns0 * s1 * s2 * ns3 * ns4;
2838 dF[13] = ns0 * s1 * s2 * ns3 * s4;
2839 dF[14] = ns0 * s1 * s2 * s3 * ns4;
2840 dF[15] = ns0 * s1 * s2 * s3 * s4;
2841 dF[16] = s0 * ns1 * ns2 * ns3 * ns4;
2842 dF[17] = s0 * ns1 * ns2 * ns3 * s4;
2843 dF[18] = s0 * ns1 * ns2 * s3 * ns4;
2844 dF[19] = s0 * ns1 * ns2 * s3 * s4;
2845 dF[20] = s0 * ns1 * s2 * ns3 * ns4;
2846 dF[21] = s0 * ns1 * s2 * ns3 * s4;
2847 dF[22] = s0 * ns1 * s2 * s3 * ns4;
2848 dF[23] = s0 * ns1 * s2 * s3 * s4;
2849 dF[24] = s0 * s1 * ns2 * ns3 * ns4;
2850 dF[25] = s0 * s1 * ns2 * ns3 * s4;
2851 dF[26] = s0 * s1 * ns2 * s3 * ns4;
2852 dF[27] = s0 * s1 * ns2 * s3 * s4;
2853 dF[28] = s0 * s1 * s2 * ns3 * ns4;
2854 dF[29] = s0 * s1 * s2 * ns3 * s4;
2855 dF[30] = s0 * s1 * s2 * s3 * ns4;
2856 dF[31] = s0 * s1 * s2 * s3 * s4;
2858 for (i=0; i<m_nOutput; i++, p++) {
2859 for (pv=0.0, j=0; j<32; j++)
2860 pv += p[m_nOffset[j]] * dF[j];
2941 icFloatNumber *p = &m_pData[ig0*n001 + ig1*n010 + ig2*n100 + ig3*n1000 + ig4*n10000 + ig5*n100000];
2946 dF[ 0] = ns0 * ns1 * ns2 * ns3 * ns4 * ns5;
2947 dF[ 1] = ns0 * ns1 * ns2 * ns3 * ns4 * s5;
2948 dF[ 2] = ns0 * ns1 * ns2 * ns3 * s4 * ns5;
2949 dF[ 3] = ns0 * ns1 * ns2 * ns3 * s4 * s5;
2950 dF[ 4] = ns0 * ns1 * ns2 * s3 * ns4 * ns5;
2951 dF[ 5] = ns0 * ns1 * ns2 * s3 * ns4 * s5;
2952 dF[ 6] = ns0 * ns1 * ns2 * s3 * s4 * ns5;
2953 dF[ 7] = ns0 * ns1 * ns2 * s3 * s4 * s5;
2954 dF[ 8] = ns0 * ns1 * s2 * ns3 * ns4 * ns5;
2955 dF[ 9] = ns0 * ns1 * s2 * ns3 * ns4 * s5;
2956 dF[10] = ns0 * ns1 * s2 * ns3 * s4 * ns5;
2957 dF[11] = ns0 * ns1 * s2 * ns3 * s4 * s5;
2958 dF[12] = ns0 * ns1 * s2 * s3 * ns4 * ns5;
2959 dF[13] = ns0 * ns1 * s2 * s3 * ns4 * s5;
2960 dF[14] = ns0 * ns1 * s2 * s3 * s4 * ns5;
2961 dF[15] = ns0 * ns1 * s2 * s3 * s4 * s5;
2962 dF[16] = ns0 * s1 * ns2 * ns3 * ns4 * ns5;
2963 dF[17] = ns0 * s1 * ns2 * ns3 * ns4 * s5;
2964 dF[18] = ns0 * s1 * ns2 * ns3 * s4 * ns5;
2965 dF[19] = ns0 * s1 * ns2 * ns3 * s4 * s5;
2966 dF[20] = ns0 * s1 * ns2 * s3 * ns4 * ns5;
2967 dF[21] = ns0 * s1 * ns2 * s3 * ns4 * s5;
2968 dF[22] = ns0 * s1 * ns2 * s3 * s4 * ns5;
2969 dF[23] = ns0 * s1 * ns2 * s3 * s4 * s5;
2970 dF[24] = ns0 * s1 * s2 * ns3 * ns4 * ns5;
2971 dF[25] = ns0 * s1 * s2 * ns3 * ns4 * s5;
2972 dF[26] = ns0 * s1 * s2 * ns3 * s4 * ns5;
2973 dF[27] = ns0 * s1 * s2 * ns3 * s4 * s5;
2974 dF[28] = ns0 * s1 * s2 * s3 * ns4 * ns5;
2975 dF[29] = ns0 * s1 * s2 * s3 * ns4 * s5;
2976 dF[30] = ns0 * s1 * s2 * s3 * s4 * ns5;
2977 dF[31] = ns0 * s1 * s2 * s3 * s4 * s5;
2978 dF[32] = s0 * ns1 * ns2 * ns3 * ns4 * ns5;
2979 dF[33] = s0 * ns1 * ns2 * ns3 * ns4 * s5;
2980 dF[34] = s0 * ns1 * ns2 * ns3 * s4 * ns5;
2981 dF[35] = s0 * ns1 * ns2 * ns3 * s4 * s5;
2982 dF[36] = s0 * ns1 * ns2 * s3 * ns4 * ns5;
2983 dF[37] = s0 * ns1 * ns2 * s3 * ns4 * s5;
2984 dF[38] = s0 * ns1 * ns2 * s3 * s4 * ns5;
2985 dF[39] = s0 * ns1 * ns2 * s3 * s4 * s5;
2986 dF[40] = s0 * ns1 * s2 * ns3 * ns4 * ns5;
2987 dF[41] = s0 * ns1 * s2 * ns3 * ns4 * s5;
2988 dF[42] = s0 * ns1 * s2 * ns3 * s4 * ns5;
2989 dF[43] = s0 * ns1 * s2 * ns3 * s4 * s5;
2990 dF[44] = s0 * ns1 * s2 * s3 * ns4 * ns5;
2991 dF[45] = s0 * ns1 * s2 * s3 * ns4 * s5;
2992 dF[46] = s0 * ns1 * s2 * s3 * s4 * ns5;
2993 dF[47] = s0 * ns1 * s2 * s3 * s4 * s5;
2994 dF[48] = s0 * s1 * ns2 * ns3 * ns4 * ns5;
2995 dF[49] = s0 * s1 * ns2 * ns3 * ns4 * s5;
2996 dF[50] = s0 * s1 * ns2 * ns3 * s4 * ns5;
2997 dF[51] = s0 * s1 * ns2 * ns3 * s4 * s5;
2998 dF[52] = s0 * s1 * ns2 * s3 * ns4 * ns5;
2999 dF[53] = s0 * s1 * ns2 * s3 * ns4 * s5;
3000 dF[54] = s0 * s1 * ns2 * s3 * s4 * ns5;
3001 dF[55] = s0 * s1 * ns2 * s3 * s4 * s5;
3002 dF[56] = s0 * s1 * s2 * ns3 * ns4 * ns5;
3003 dF[57] = s0 * s1 * s2 * ns3 * ns4 * s5;
3004 dF[58] = s0 * s1 * s2 * ns3 * s4 * ns5;
3005 dF[59] = s0 * s1 * s2 * ns3 * s4 * s5;
3006 dF[60] = s0 * s1 * s2 * s3 * ns4 * ns5;
3007 dF[61] = s0 * s1 * s2 * s3 * ns4 * s5;
3008 dF[62] = s0 * s1 * s2 * s3 * s4 * ns5;
3009 dF[63] = s0 * s1 * s2 * s3 * s4 * s5;
3011 for (i=0; i<m_nOutput; i++, p++) {
3012 for (pv=0, j=0; j<64; j++)
3013 pv += p[m_nOffset[j]] * dF[j];
3444 icChar buf[128], color[40];
3447 if (IsInputMatrix()) {
3448 if (m_CurvesB && !m_bUseMCurvesAsBCurves) {
3449 for (i=0; i<m_nInput; i++) {
3451 sprintf(buf,
"B_Curve_%s", color);
3452 m_CurvesB[i]->DumpLut(sDescription, buf, m_csInput, i, nVerboseness);
3457 m_Matrix->DumpLut(sDescription,
"Matrix", nVerboseness);
3460 for (i=0; i<m_nInput; i++) {
3462 if (!m_bUseMCurvesAsBCurves)
3463 sprintf(buf,
"M_Curve_%s", color);
3465 sprintf(buf,
"B_Curve_%s", color);
3466 m_CurvesM[i]->DumpLut(sDescription, buf, m_csInput, i, nVerboseness);
3471 m_CLUT->DumpLut(sDescription,
"CLUT", m_csInput, m_csOutput, nVerboseness, GetType()==
icSigLut16Type);
3474 for (i=0; i<m_nOutput; i++) {
3476 sprintf(buf,
"A_Curve_%s", color);
3477 m_CurvesA[i]->DumpLut(sDescription, buf, m_csOutput, i, nVerboseness);
3483 for (i=0; i<m_nInput; i++) {
3485 sprintf(buf,
"A_Curve_%s", color);
3486 m_CurvesA[i]->DumpLut(sDescription, buf, m_csInput, i, nVerboseness);
3491 m_CLUT->DumpLut(sDescription,
"CLUT", m_csInput, m_csOutput, nVerboseness);
3494 for (i=0; i<m_nOutput; i++) {
3496 sprintf(buf,
"M_Curve_%s", color);
3497 m_CurvesM[i]->DumpLut(sDescription, buf, m_csOutput, i, nVerboseness);
3502 m_Matrix->DumpLut(sDescription,
"Matrix", nVerboseness);
3505 for (i=0; i<m_nOutput; i++) {
3507 sprintf(buf,
"B_Curve_%s", color);
3508 m_CurvesB[i]->DumpLut(sDescription, buf, m_csOutput, i, nVerboseness);