Esempio n. 1
0
        public static Bitmap DetectLines(Bitmap target, ThresholdParams param)
        {
            var        newTarget   = new Bitmap(target.Width, target.Height);
            var        points      = DetectContourPoints(target, param);
            BitmapData targetData1 = target.LockBits(
                new Rectangle(0, 0, target.Width, target.Height),
                ImageLockMode.ReadWrite, target.PixelFormat);

            byte[] targetData    = new byte[targetData1.Stride * targetData1.Height];
            byte[] newTargetData = new byte[targetData.Length];
            var    lines         = LineRecognizer.RecognizeLines(ref points, target.Size.Width, target.Size.Height);

            newTarget = new Bitmap(target.Width, target.Height, targetData1.Stride,
                                   target.PixelFormat,
                                   Marshal.UnsafeAddrOfPinnedArrayElement(newTargetData, 0));
            var graphics = Graphics.FromImage(newTarget);

            foreach (var elem in points)
            {
                newTarget.SetPixel(elem.X, elem.Y, Color.Black);
            }

            foreach (var e in lines)
            {
                DrawLine(e, graphics);
            }
            target.UnlockBits(targetData1);
            return(newTarget);
        }
Esempio n. 2
0
        public static Bitmap DetectContour(Bitmap target, ThresholdParams param)
        {
            var points    = DetectContourPoints(target, param);
            var newTarget = new Bitmap(target.Width, target.Height);

            foreach (var elem in points)
            {
                newTarget.SetPixel(elem.X, elem.Y, Color.Black);
            }
            return(newTarget);
        }
Esempio n. 3
0
        private static List <Point> DetectContourPoints(Bitmap target, ThresholdParams param)
        {
            BitmapData targetData1 = target.LockBits(new Rectangle(0, 0, target.Width, target.Height), ImageLockMode.ReadWrite, target.PixelFormat);

            byte[] targetData = new byte[targetData1.Stride * targetData1.Height];
            Marshal.Copy(targetData1.Scan0, targetData, 0, targetData.Length);
            target.UnlockBits(targetData1);
            byte[] newTargetData = new byte[targetData.Length];
            bool[,] mask = new bool[target.Size.Width, target.Size.Height];
            List <Point> points = new List <Point>();

            if (param.IsAdapt)
            {
                points = ThresholdAdapter.Adapt(target, param);
            }
            return(points);
        }