Ejemplo n.º 1
0
        public static PixelData GetOutLinePixelData(PixelData pixels, float distance, bool isHSB = false)
        {
            Func <Color, Color, float, bool> CompareColor = (Color c1, Color c2, float d) =>
            {
                return(isHSB ? CompareBaseHSB(c1, c2, d) : CompareBaseRGB(c1, c2, d));
            };
            Func <Color, Color, bool> CompareColorExtra = (Color c1, Color c2) =>
            {
                return(isHSB ? c1.GetBrightness() - c2.GetBrightness() > 0 : GetGrayOfColor(c1) - GetGrayOfColor(c2) > 0);
            };
            var   colors = pixels.GetColorsClone();
            Color color1, color2;

            for (var i = 1; i <= pixels.Width - 2; i++)
            {
                for (var j = 1; j <= pixels.Height - 2; j++)
                {
                    color1 = pixels.Colors[i, j];
                    for (var p = 0; p <= 3; p++)
                    {
                        color2 = pixels.Colors[i + OffsetX[p], j + OffsetY[p]];
                        if (!CompareColor(color1, color2, distance) && CompareColorExtra(color1, color2))
                        {
                            colors[i, j] = Color.Black;
                        }
                        else
                        {
                            colors[i, j] = Color.White;
                        }
                    }
                }
            }
            return(PixelData.CreateFromColors(colors));
        }
Ejemplo n.º 2
0
 public static PixelData GetLumpPixelData(PixelData pixels, int range = 10)
 {
     Color[,] colors = pixels.GetColorsClone();
     for (var i = 0; i <= pixels.Width - 1; i++)
     {
         for (var j = 0; j <= pixels.Height - 1; j++)
         {
             var r = (colors[i, j].R / range) * range;
             var g = (colors[i, j].G / range) * range;
             var b = (colors[i, j].B / range) * range;
             colors[i, j] = Color.FromArgb(r, g, b);
         }
     }
     return(PixelData.CreateFromColors(colors));
 }
Ejemplo n.º 3
0
        public static PixelData GetThresholdPixelData(PixelData pixels, float threshold, bool isHSB = false)
        {
            Color[,] colors = pixels.GetColorsClone();
            Func <Color, bool> IsOverThreshold = (Color color) =>
            {
                return(isHSB ? (color.GetHue() / 360 + color.GetBrightness() + color.GetSaturation()) / (double)3 < threshold : GetGrayOfColor(color) < threshold);
            };

            for (var i = 0; i <= pixels.Width - 1; i++)
            {
                for (var j = 0; j <= pixels.Height - 1; j++)
                {
                    colors[i, j] = IsOverThreshold(colors[i, j]) ? Color.Black : Color.White;
                }
            }
            return(PixelData.CreateFromColors(colors));
        }
Ejemplo n.º 4
0
 public static int[,] GetPixelDataBools(PixelData pixels)
 {
     int[,] result   = new int[pixels.Width - 1 + 1, pixels.Height - 1 + 1];
     Color[,] colors = pixels.GetColorsClone();
     for (var i = 0; i <= pixels.Width - 1; i++)
     {
         for (var j = 0; j <= pixels.Height - 1; j++)
         {
             if (colors[i, j].Equals(Color.FromArgb(255, 255, 255)))
             {
                 result[i, j] = 0;
             }
             else
             {
                 result[i, j] = 1;
             }
         }
     }
     return(result);
 }
Ejemplo n.º 5
0
        public static PixelData GetInvertPixelData(PixelData pixels)
        {
            var colors = pixels.GetColorsClone();

            int[,] bools = GetPixelDataBools(pixels);
            for (var i = 0; i <= pixels.Width - 1; i++)
            {
                for (var j = 0; j <= pixels.Height - 1; j++)
                {
                    if (bools[i, j] == 0)
                    {
                        colors[i, j] = Color.Black;
                    }
                    else
                    {
                        colors[i, j] = Color.White;
                    }
                }
            }
            return(PixelData.CreateFromColors(colors));
        }
Ejemplo n.º 6
0
        public static PixelData Solve(PixelData pixels)
        {
            int[,] bools    = ColorHelper.GetPixelDataBools(pixels);
            int[,] iThin    = bools.Clone() as int[, ];
            Color[,] colors = pixels.GetColorsClone();

            int w = pixels.Width;
            int h = pixels.Height;

            for (var i = 0; i < h; i++)
            {
                for (var j = 0; j < w; j++)
                {
                    if (bools[j, i] == 1)
                    {
                        int   sum = 0;
                        int[] a   = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
                        for (int m = 0; m < 3; m++)
                        {
                            for (int n = 0; n < 3; n++)
                            {
                                int ry = i - 1 + m;
                                int rx = j - 1 + n;
                                if (-1 < rx && rx < w && -1 < ry && ry < h && iThin[rx, ry] == 1)
                                {
                                    a[m * 3 + n] = 0;
                                }
                            }
                        }
                        sum          = a[0] * 1 + a[1] * 2 + a[2] * 4 + a[3] * 8 + a[5] * 16 + a[6] * 32 + a[7] * 64 + a[8] * 128;
                        iThin[j, i]  = 1 - ThinMap[sum];
                        colors[j, i] = iThin[j, i] == 1 ? Color.Black : Color.White;
                    }
                }
            }

            return(PixelData.CreateFromColors(colors));
        }