Ejemplo n.º 1
0
 private void Mark(WuColorBox box, byte label)
 {
     for (int r = box.R0 + 1; r <= box.R1; r++)
     {
         for (int g = box.G0 + 1; g <= box.G1; g++)
         {
             for (int b = box.B0 + 1; b <= box.B1; b++)
             {
                 for (int a = box.A0 + 1; a <= box.A1; a++)
                 {
                     tag[WuCommon.GetIndex(r, g, b, a, _indexBits, _indexAlphaBits)] = label;
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
        public static bool Cut(WuColorBox set1, WuColorBox set2)
        {
            double wholeR = set1.GetPartialVolume(1);
            double wholeG = set1.GetPartialVolume(2);
            double wholeB = set1.GetPartialVolume(3);
            double wholeA = set1.GetPartialVolume(4);
            double wholeW = set1.GetPartialVolume(5);

            double maxr = set1.Maximize(3, set1.R0 + 1, set1.R1, out var cutr, wholeR, wholeG, wholeB, wholeA, wholeW);
            double maxg = set1.Maximize(2, set1.G0 + 1, set1.G1, out var cutg, wholeR, wholeG, wholeB, wholeA, wholeW);
            double maxb = set1.Maximize(1, set1.B0 + 1, set1.B1, out var cutb, wholeR, wholeG, wholeB, wholeA, wholeW);
            double maxa = set1.Maximize(0, set1.A0 + 1, set1.A1, out var cuta, wholeR, wholeG, wholeB, wholeA, wholeW);

            int dir;

            if ((maxr >= maxg) && (maxr >= maxb) && (maxr >= maxa))
            {
                dir = 3;

                if (cutr < 0)
                {
                    return(false);
                }
            }
            else if ((maxg >= maxr) && (maxg >= maxb) && (maxg >= maxa))
            {
                dir = 2;
            }
            else if ((maxb >= maxr) && (maxb >= maxg) && (maxb >= maxa))
            {
                dir = 1;
            }
            else
            {
                dir = 0;
            }

            set2.R1 = set1.R1;
            set2.G1 = set1.G1;
            set2.B1 = set1.B1;
            set2.A1 = set1.A1;

            switch (dir)
            {
            // Red
            case 3:
                set2.R0 = set1.R1 = cutr;
                set2.G0 = set1.G0;
                set2.B0 = set1.B0;
                set2.A0 = set1.A0;
                break;

            // Green
            case 2:
                set2.G0 = set1.G1 = cutg;
                set2.R0 = set1.R0;
                set2.B0 = set1.B0;
                set2.A0 = set1.A0;
                break;

            // Blue
            case 1:
                set2.B0 = set1.B1 = cutb;
                set2.R0 = set1.R0;
                set2.G0 = set1.G0;
                set2.A0 = set1.A0;
                break;

            // Alpha
            case 0:
                set2.A0 = set1.A1 = cuta;
                set2.R0 = set1.R0;
                set2.G0 = set1.G0;
                set2.B0 = set1.B0;
                break;
            }

            set1.Volume = (set1.R1 - set1.R0) * (set1.G1 - set1.G0) * (set1.B1 - set1.B0) * (set1.A1 - set1.A0);
            set2.Volume = (set2.R1 - set2.R0) * (set2.G1 - set2.G0) * (set2.B1 - set2.B0) * (set2.A1 - set2.A0);

            return(true);
        }