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"); } }
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"); } }
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)
} //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)); }
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)