コード例 #1
0
        List <RectangleRef> FindRanges(RectangleRef rect, ColorBgra Color, bool IgnoreWithinTolerance)
        {
            Surface             src = SrcArgs.Surface;
            List <RectangleRef> ranges = new List <RectangleRef>();
            byte rangeFound = 0;
            int  rangeStart = 0, rangeEnd = 0;

            for (int y = rect.Top; y < rect.Bottom; ++y)
            {
                if (IsCancelRequested)
                {
                    goto endloop;
                }
                for (int x = rect.Left; x < rect.Right; ++x)
                {
                    switch (rangeFound)
                    {
                    case 0:
                    {
                        if (ColorUtils.RGBPercentage(src[x, y], Color) <= Tolerance ^ IgnoreWithinTolerance)
                        {
                            rangeFound = 1;
                            rangeStart = x;
                        }
                        break;
                    }

                    case 1:
                    {
                        if (ColorUtils.RGBPercentage(src[x, y], Color) > Tolerance ^ IgnoreWithinTolerance)
                        {
                            rangeFound = 2;
                            rangeEnd   = x;
                            goto case 2;
                        }
                        break;
                    }

                    case 2:
                    {
                        ranges.Add(new RectangleRef(rangeStart, y, rangeEnd - rangeStart, 1));
                        rangeFound = 0;
                        break;
                    }
                    }
                }
                if (1 == rangeFound)
                {
                    ranges.Add(new RectangleRef(rangeStart, y, rect.Right - rangeStart, 1));
                    rangeFound = 0;
                }
            }
endloop:
            CompressRanges(ranges);
            return(ranges);
        }
コード例 #2
0
        void CleanUp(RectangleRef r)
        {
            Surface dst = DstArgs.Surface, src = SrcArgs.Surface;
            int     ymax = r.Bottom;
            int     xmax = r.Right;

            for (int y = r.Top; y < ymax; ++y)
            {
                for (int x = r.Left; x < xmax; ++x)
                {
                    dst[x, y] = src[x, y];
                }
            }
        }
コード例 #3
0
 static void CompressRanges(List <RectangleRef> ranges)
 {
     ranges.Sort();
     for (int i = 1; i < ranges.Count(); ++i)
     {
         if (ranges[i - 1].rect.Left == ranges[i].rect.Left && ranges[i - 1].rect.Right == ranges[i].rect.Right && ranges[i - 1].rect.Bottom == ranges[i].rect.Top)
         {
             ranges[i - 1] = new RectangleRef(ranges[i - 1].rect.Location, new Size(ranges[i].rect.Width, ranges[i - 1].rect.Height + ranges[i].rect.Height));
             ranges.RemoveAt(i--);
         }                 /*
                            * else if(ranges[i-1].r==ranges[i].r) {
                            *    ranges.RemoveAt(--i);
                            * }*/
     }
 }
コード例 #4
0
        protected override void OnSetRenderInfo(PropertyBasedEffectConfigToken newToken, RenderArgs dstArgs, RenderArgs srcArgs)
        {
            Modes OldMode = Mode;

            Mode           = (Modes)newToken.GetProperty <StaticListChoiceProperty>(PropertyNames.Mode).Value;
            ModeChanged    = Mode != OldMode;
            LowerThreshold = newToken.GetProperty <Int32Property>(PropertyNames.LowerThreshold).Value;

            UpperThreshold = newToken.GetProperty <Int32Property>(PropertyNames.UpperThreshold).Value;

            float OldTolerance = Tolerance;

            Tolerance        = newToken.GetProperty <Int32Property>(PropertyNames.Tolerance).Value;
            Tolerance       *= Tolerance / toleranceMax / toleranceMax;
            ToleranceChanged = Tolerance != OldTolerance;

            base.OnSetRenderInfo(newToken, dstArgs, srcArgs);

            PdnRegion           selection = EnvironmentParameters.GetSelection(SrcArgs.Surface.Bounds);
            List <RectangleRef> selRects  = RectangleRef.RectanglesToRectangleRefs(selection.GetRegionScansInt());

            CustomOnRender(RectangleRef.SplitSmall(selRects, selection.GetBoundsInt().Bottom / 4));
        }
コード例 #5
0
 public ClusterPart(RectangleRef rr)
 {
     Rectangle = rr;
 }