private static void TestCieXYZToLuv(float x, float y, float z, float expectedL, float expectedU, float expectedV)
        {
            float l, u, v;

            CieLuvUtils.CieXYZToLuv(x, y, z, out l, out u, out v);

            Assert.That(l, Is.EqualTo(expectedL).Within(Epsilon));
            Assert.That(u, Is.EqualTo(expectedU).Within(Epsilon));
            Assert.That(v, Is.EqualTo(expectedV).Within(Epsilon));
        }
        public void LabToCieXYZ_is_inverse_of_CieXYZToLab()
        {
            for (float x = 0; x <= 0.95047f; x += Step)
            {
                for (float y = Step; y <= 1.0f; y += Step)
                {
                    for (float z = 0; z <= 1.08883; z += Step)
                    {
                        if (x == 0)
                        {
                            continue;
                        }

                        float l, u, v;
                        CieLuvUtils.CieXYZToLuv(x, y, z, out l, out u, out v);

                        TestLuvToCieXYZ(l, u, v, x, y, z);
                    }
                }
            }
        }
예제 #3
0
        public static void CieXYZToLCh(
            float x, float y, float z,
            out float l, out float c, out float h,
            LxyModel model = LxyModel.Lab, float[] referenceWhiteXyz = null)
        {
            float lxy_l, lxy_x, lxy_y;

            switch (model)
            {
            case LxyModel.Lab:
                CieLabUtils.CieXYZToLab(x, y, z, out lxy_l, out lxy_x, out lxy_y, referenceWhiteXyz);
                break;

            case LxyModel.Luv:
                CieLuvUtils.CieXYZToLuv(x, y, z, out lxy_l, out lxy_x, out lxy_y, referenceWhiteXyz);
                break;

            default:
                throw new ArgumentException("Illegal model!");
            }

            LxyToLCh(lxy_l, lxy_x, lxy_y, out l, out c, out h);
        }