Esempio n. 1
0
        public Gradient(ref PixelYhsa pxUpper, ref PixelYhsa pxLower)
        {
            bool bGood = true;

            try {
                if (pxUpper == null)
                {
                    RReporting.ShowErr("pxUpper is null", "Gradient(YHSA,YHSA)", "creating gradient");
                    bGood = false;
                }
                else if (pxLower == null)
                {
                    RReporting.ShowErr("pxUpper is null", "Gradient(YHSA,YHSA)", "creating gradient");
                    bGood = false;
                }
                if (bGood)
                {
                    if (!From(ref pxUpper, ref pxLower))
                    {
                        bGood = false;
                        RReporting.ShowErr("From(PixelYhsa,PixelYhsa) failed!", "Gradient constructor");
                    }
                }
            }
            catch (Exception exn) {
                RReporting.ShowExn(exn, "Gradient(YHSA,YHSA)", "initializing");
            }
        }
Esempio n. 2
0
        public Gradient()
        {
            PixelYhsa pxUpper = null;
            PixelYhsa pxLower = null;
            bool      bGood   = true;

            try {
                pxUpper = new PixelYhsa(1, 0, 0, 1);
                pxLower = new PixelYhsa(0, 0, 0, 0);
                if (pxUpper == null)
                {
                    bGood = false;
                    RReporting.ShowErr("Couldn't allocate pixel (upper)", "Gradient");                   //TODO: remove this line, for performance
                }
                if (pxLower == null)
                {
                    bGood = false;
                    RReporting.ShowErr("Couldn't allocate pixel (lower)", "Gradient");                   //TODO: remove this line, for performance
                }
                if (bGood)
                {
                    RReporting.Write("Create gradient...");
                    bGood = From(ref pxUpper, ref pxLower);
                    RReporting.WriteLine(bGood?"Success.":"Failed!");
                }
                else
                {
                    RReporting.ShowErr("Create gradient failed!", "Gradient constructor");
                }
            }
            catch (Exception exn) {
                bGood = false;
                RReporting.ShowExn(exn, "Gradient()", "initializing");
            }
        }
Esempio n. 3
0
        public bool Shade(ref PixelYhsa pxDest, REAL rSrcZeroTo1)
        {
            //TODO:? return top or bottom if out of range
            bool bFound   = false;
            bool bWasNull = false;

            try {
                if (pxDest == null)
                {
                    bWasNull = true;
                    pxDest   = new PixelYhsa();
                }
                if (STEPS > 0)
                {
                    if (rSrcZeroTo1 <= (REAL)0.0)
                    {
                        pxDest.From(pxarrStep[0]);
                    }
                    //else if (rSrcZeroTo1==(REAL)1.0) pxDest.From(pxarrStep[STEPS-1]);//unnecessary since !bFound is checked below
                    //else pxDest.From(pxarrStep[iTop]);//debug only
                    //else if (rSrcZeroTo1>=(REAL)1.0) pxDest.From(pxarrStep[iTop]);
                    else
                    {
                        int  iLower = 0;
                        REAL ratio;
                        for (int iUpper = 1; iUpper < STEPS; iUpper++, iLower++)
                        {
                            //start at 1 since the first "Top" is 1
                            if (rSrcZeroTo1 < rarrStep[iUpper])
                            {
                                //the ratio formula: (abs-min)/(max-min)
                                ratio = (rSrcZeroTo1 - rarrStep[iLower]) / (rarrStep[iUpper] - rarrStep[iLower]);
                                if (ratio == RMath.r0)
                                {
                                    pxDest.From(pxarrStep[iLower]);
                                }
                                else if (ratio == RMath.r1)
                                {
                                    pxDest.From(pxarrStep[iLower]);
                                }
                                else
                                {
                                    //use the alpha formula: (src-dest)*fAlphaRatio+dest
                                    pxDest.Y = (pxDest.Y - pxarrStep[iLower].Y) * ratio + pxDest.Y;
                                    pxDest.H = (pxDest.H - pxarrStep[iLower].H) * ratio + pxDest.H;
                                    pxDest.S = (pxDest.S - pxarrStep[iLower].S) * ratio + pxDest.S;
                                    pxDest.A = (pxDest.A - pxarrStep[iLower].A) * ratio + pxDest.A;
                                }
                                bFound = true;
                            }
                        }
                        if (!bFound)
                        {
                            pxDest.From(pxarrStep[STEPS - 1]);
                        }
                    }            //else shade rationally
                }                //end if steps are initialized
                else
                {
                    pxDest.Set(0, 0, 0, 0);
                }
            }
            catch (Exception exn) {
                RReporting.ShowExn(exn, "Gradient Shade(YHSA)");
            }
            if (bWasNull)
            {
                RReporting.ShowErr("Null dest pixel", "Gradient Shade(YHSA)");
            }
            return(bFound); //TODO: is this right?
        }                   //end Shade(YHSA,REAL)
Esempio n. 4
0
        }        //end From(YHS,YHS)

        //public int NextLevelBelow(REAL rSrcZeroTo1) {
        //}
        //public bool IsInRange(REAL rSrcZeroTo1) {
        //}
        public bool Shade(ref PixelYhsa pxDest, PixelYhs pxAssumeGrayAndUseY)
        {
            return(Shade(ref pxDest, pxAssumeGrayAndUseY.Y));
        }
Esempio n. 5
0
        public bool From(ref PixelYhsa pxUpper, ref PixelYhsa pxLower)
        {
            bool bGood = false;

            try {
                //PixelYhsa pxUpperNow=new PixelYhsa(pxUpper);
                //PixelYhsa pxLowerNow=new PixelYhsa(pxLower);
                try {
                    STEPS = 2;
                }
                catch (Exception exn) {
                    bGood = false;
                    RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "setting steps to " + STEPS.ToString());
                }
                if (pxarrStep == null)
                {
                    bGood = false;
                    RReporting.ShowErr("Gradient step array is still null!", "Gradient From(YHSA,YHSA)");
                }
                else if (pxarrStep[0] == null)
                {
                    bGood = false;
                    RReporting.ShowErr("Gradient step first index is still null!", "Gradient From(YHSA,YHSA)");
                }
                try {
                    pxarrStep[0].Y = pxarrStep[0].Y;
                }
                catch (Exception exn) {
                    bGood = false;
                    RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "accessing pixel step array");
                }
                try {
                    pxarrStep[0].Y = pxLower.Y;
                    pxarrStep[0].H = pxLower.H;
                    pxarrStep[0].S = pxLower.S;
                    pxarrStep[0].A = pxLower.A;
                }
                catch (Exception exn) {
                    bGood = false;
                    RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "copying lower pixel values");
                }
                try {
                    pxarrStep[1].Y = pxUpper.Y;
                    pxarrStep[1].H = pxUpper.H;
                    pxarrStep[1].S = pxUpper.S;
                    pxarrStep[1].A = pxUpper.A;
                }
                catch (Exception exn) {
                    bGood = false;
                    RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "copying upper pixel values");
                }
                try {
                    rarrStep[0] = (REAL)0.0;
                    rarrStep[1] = (REAL)1.0;
                }
                catch (Exception exn) {
                    bGood = false;
                    RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "setting step values");
                }
                bGood = true;
            }
            catch (Exception exn) {
                bGood = false;
                RReporting.ShowExn(exn, "Gradient.From(YHSA,YHSA)", "copying values");
            }
            return(bGood);
        }        //end From(YHSA,YHSA)