Example #1
0
        public Bitmap analizarImagen(Bitmap source)
        {
            Pixel pixelTop    = new Pixel(0, 0);
            Pixel pixelBottom = new Pixel(0, 0);
            Pixel pixelLeft   = new Pixel(0, 0);
            Pixel pixelRight  = new Pixel(0, 0);
            bool  primero     = false;
            bool  segundo     = false;

            //datos iniciales
            System.Diagnostics.Debug.WriteLine("Ancho X " + source.Height);
            System.Diagnostics.Debug.WriteLine("Ancho Y " + source.Height);
            //ancho de metatarzo

            // Recorrer pixel de la imagen para top y bottom
            for (int i = 0; i < source.Height; i++)
            {
                for (int j = 0; j < source.Width; j++)
                {
                    if (pixelValido(source, j, i, source.Width, source.Height))
                    {
                        //top
                        if (primero == false)//toptiene el primer pixel valido dede el eje y
                        {
                            pixelTop.x = j;
                            pixelTop.y = i;
                            primero    = true;


                            //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul
                            //source.SetPixel(j, i, newColor);
                        }
                        //bottom  //ultimo pixel yalido desde eje y
                        pixelBottom.x = j;
                        pixelBottom.y = i;
                    }
                }
            }
            // Recorrer pixel de la imagen para left  y right
            for (int i = 0; i < source.Width; i++)
            {
                for (int j = 0; j < source.Height; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (segundo == false)//toptiene el primer pixel valido dede el eje y
                        {
                            pixelLeft.x = i;
                            pixelLeft.y = j;
                            segundo     = true;


                            //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul
                            //source.SetPixel(j, i, newColor);
                        }
                        //bottom  //ultimo pixel yalido desde eje y
                        pixelRight.x = i;
                        pixelRight.y = j;
                    }
                }
            }
            //dibijar top
            dibujarPunto(source, pixelTop.x, pixelTop.y, System.Drawing.Color.Red);
            //dibujar boottom
            dibujarPunto(source, pixelBottom.x, pixelBottom.y, System.Drawing.Color.Yellow);
            //dibujar left
            dibujarPunto(source, pixelLeft.x, pixelLeft.y, System.Drawing.Color.Brown);
            //dibujar Right
            dibujarPunto(source, pixelRight.x, pixelRight.y, System.Drawing.Color.Chocolate);
            //punto 1
            bool  punto1   = false;
            Pixel puntoUno = new Pixel(0, 0);

            for (int i = pixelLeft.x; i <= pixelRight.x; i++)
            {
                //0.34 o 0.39 max
                for (int j = Convert.ToInt32(((source.Height / 2) * 0.39f)); j < source.Height / 2; j++)

                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (punto1 == false)//toptiene el primer pixel valido dede el eje y
                        {
                            puntoUno.x = i;
                            puntoUno.y = j;
                            punto1     = true;


                            // Color newColor = System.Drawing.Color.Pink;//pongo de color azul
                            // source.SetPixel(i, j, newColor);
                        }
                    }
                }
            }
            //metatarzo ancho del
            mf = puntoUno.y;

            //punto 2
            bool  punto2   = false;
            Pixel puntoDos = new Pixel(0, 0);

            for (int i = pixelLeft.x; i <= pixelRight.x; i++)
            {
                //busca el punto 2 desde lamitad de la huella mas el 20%
                for (int j = Convert.ToInt32((pixelBottom.y / 2) + (pixelBottom.y / 2) * 0.35); j <= pixelBottom.y; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (punto2 == false)//toptiene el primer pixel valido dede el eje y
                        {
                            puntoDos.x = i;
                            puntoDos.y = j;
                            punto2     = true;
                            // Color newColor = System.Drawing.Color.Red;//pongo de color azul
                            // source.SetPixel(i, j, newColor);
                        }
                    }
                }
            }



            Pixel puntoUnoPrima = new Pixel(puntoUno.x, (mf * 2) - pixelTop.y);

            Pixel puntoUnoPrimaDos = new Pixel(puntoUno.x, (mf * 3) - (pixelTop.y * 2));
            //calculo talon fin
            Pixel puntoDosFin = new Pixel(0, 0);

            for (int i = pixelLeft.x; i <= pixelRight.x; i++)
            {
                //busca el punto 2 desde lamitad de la huella mas el 20%
                for (int j = puntoUnoPrimaDos.y; j <= pixelBottom.y; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        puntoDosFin.x = i;
                        puntoDosFin.y = j;
                    }
                }
            }

            //calculo de archo externo esta ligado al puntouno prima

            bool  punto4                = false;
            Pixel pixelArcoExterno      = new Pixel(0, 0);
            Pixel pixelArcoExternoFinal = new Pixel(0, 0);

            for (int i = pixelLeft.x; i <= pixelRight.x; i++)
            {
                for (int j = puntoUnoPrima.y; j <= puntoUnoPrima.y; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (punto4 == false)//toptiene el primer pixel valido dede el eje y
                        {
                            pixelArcoExterno.x = i;
                            pixelArcoExterno.y = j;
                            punto4             = true;
                            // Color newColor = System.Drawing.Color.Red;//pongo de color azul
                            // source.SetPixel(i, j, newColor);
                        }
                        //pixel final
                        pixelArcoExternoFinal.x = i;
                        pixelArcoExternoFinal.y = j;
                    }
                }
            }

            ///formula calculo plantograma

            //calcular X
            bool  puntoxFinal = false;
            Pixel puntoX      = new Pixel(0, 0);
            Pixel puntoXfinal = new Pixel(0, 0);

            for (int i = 0; i < pixelRight.x; i++)
            {//comienza desde el punto uno mas 10%
                for (int j = puntoUno.y; j <= puntoUnoPrima.y; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (puntoxFinal == false)//toptiene el primer pixel valido dede el eje y
                        {
                            puntoX.x    = i;
                            puntoX.y    = j;
                            puntoxFinal = true;
                            // Color newColor = System.Drawing.Color.Red;//pongo de color azul
                            // source.SetPixel(i, j, newColor);
                        }
                        //pixel final
                        puntoXfinal.x = i;
                        puntoXfinal.y = j;
                    }
                }
            }
            //dibujar lineas
            //dibujar linea top
            dibujarLinea(source, pixelRight.x, pixelTop.y, pixelLeft.x, pixelTop.y, System.Drawing.Color.Yellow);
            //dibujar lina bottoom
            dibujarLinea(source, pixelRight.x, pixelBottom.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue);
            //dibujar linera left
            dibujarLinea(source, pixelLeft.x, pixelTop.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue);
            //digujar linea right
            dibujarLinea(source, pixelRight.x, pixelTop.y, pixelRight.x, pixelBottom.y, System.Drawing.Color.Blue);
            //lo que se guarda
            //trazar de punto 1
            dibujarLinea(source, puntoUno.x, puntoUno.y, pixelRight.x, puntoUno.y, System.Drawing.Color.Blue);
            //trazar punto 2
            dibujarLinea(source, puntoUnoPrima.x, puntoUnoPrima.y, pixelRight.x, puntoUnoPrima.y, System.Drawing.Color.Blue);
            //trazar punto 3
            dibujarLinea(source, puntoUno.x, puntoUnoPrimaDos.y, pixelRight.x, puntoUnoPrimaDos.y, System.Drawing.Color.Blue);
            //trazar de punto 1 a punto2
            dibujarLinea(source, puntoUno.x, puntoUno.y, puntoDos.x, puntoDos.y, System.Drawing.Color.Red);
            //trazar linea arco externo
            dibujarLinea(source, pixelArcoExterno.x, pixelArcoExterno.y, pixelArcoExternoFinal.x, pixelArcoExternoFinal.y, System.Drawing.Color.Red);

            //dibujar linea punto X final
            dibujarLinea(source, puntoXfinal.x, puntoUno.y, puntoXfinal.x, puntoUnoPrima.y, System.Drawing.Color.Red);
            //dibujar talon hertical
            dibujarLinea(source, puntoDosFin.x, puntoUnoPrimaDos.y, puntoDosFin.x, pixelBottom.y, System.Drawing.Color.Red);
            //resultado de tipo de pie en porcentaje
            X         = puntoXfinal.x - puntoUno.x;                     //ancho del metatarso
            Y         = (pixelArcoExternoFinal.x - pixelArcoExterno.x); //ancho de la impresion
            resultado = CalcularTipoPie(X, Y);
            //resultado espacio interno //ai
            espacioInterno = Convert.ToInt32(pixelArcoExterno.x - puntoUno.x);
            //resultado  talon
            talon = Convert.ToInt32(puntoDosFin.x - puntoDos.x);
            //medida fundamental mf
            mf = puntoUno.y - pixelTop.y;

            //Ai
            //X' =X(y'/Y)calcula el valor de x a restar donde se cruza el trrazo dl punto 1 a punto 2  con el x del pixelArcoExterno
            // generamos un triangulo
            int   triX      = puntoDos.x - puntoUno.x;                                                         //base del triangulo
            int   triY      = puntoDos.y - puntoUno.y;                                                         //altura
            int   triYprima = pixelArcoExterno.y - puntoUno.y;                                                 //valor en Y que queremos saber
            float xprima    = Convert.ToSingle(triX) * (Convert.ToSingle(triYprima) / Convert.ToSingle(triY)); //optiene el valor de X en la altura de Y

            ai = Convert.ToInt32((pixelArcoExterno.x - puntoUno.x) - xprima);
            //longitud pie Y
            longitudPieY = pixelBottom.y - pixelTop.y;
            //logitud pie X
            longitudPieX = pixelRight.x - pixelLeft.x;
            return(source);
        }
Example #2
0
        public Bitmap analizarImagenMedoto2(Bitmap source)
        {
            Pixel pixelTop    = new Pixel(0, 0);
            Pixel pixelBottom = new Pixel(0, 0);
            Pixel pixelLeft   = new Pixel(0, 0);
            Pixel pixelRight  = new Pixel(0, 0);
            bool  primero     = false;
            bool  segundo     = false;

            //datos iniciales

            /*
             * System.Diagnostics.Debug.WriteLine(" sizeImgHTML Width:" + sizeImgHTML.x);
             * System.Diagnostics.Debug.WriteLine(" sizeImgHTML Height:" + sizeImgHTML.y);
             * System.Diagnostics.Debug.WriteLine(" select html ponit X:" + pixelTopSelect.x);
             * System.Diagnostics.Debug.WriteLine(" select html point Y:" + pixelTopSelect.y);*/

            System.Diagnostics.Debug.WriteLine(" original Width:" + source.Width);
            System.Diagnostics.Debug.WriteLine(" original Height:" + source.Height);/*
                                                                                     * Pixel pixelProyeccionTop = new Pixel(proyeccionPixelHtml(source.Width, sizeImgHTML.x, pixelTopSelect.x), proyeccionPixelHtml(source.Height, sizeImgHTML.y, pixelTopSelect.y));
                                                                                     * System.Diagnostics.Debug.WriteLine("select original X:" + pixelProyeccionTop.x);
                                                                                     * System.Diagnostics.Debug.WriteLine("select original Y:" + pixelProyeccionTop.y);*/
            //ancho de metatarzo

            // Recorrer pixel de la imagen para top y bottom
            for (int i = 0; i < source.Height; i++)
            {
                for (int j = 0; j < source.Width; j++)
                {
                    if (pixelValido(source, j, i, source.Width, source.Height))
                    {
                        //top
                        if (primero == false)//toptiene el primer pixel valido dede el eje y
                        {
                            pixelTop.x = j;
                            pixelTop.y = i;
                            primero    = true;


                            //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul
                            //source.SetPixel(j, i, newColor);
                        }
                        //bottom  //ultimo pixel yalido desde eje y
                        pixelBottom.x = j;
                        pixelBottom.y = i;
                    }
                }
            }
            // pixelTop = pixelProyeccionTop;
            // Recorrer pixel de la imagen para left  y right
            for (int i = 0; i < source.Width; i++)
            {
                for (int j = 0; j < source.Height; j++)
                {
                    if (pixelValido(source, i, j, source.Width, source.Height))
                    {
                        //top
                        if (segundo == false)//toptiene el primer pixel valido dede el eje y
                        {
                            pixelLeft.x = i;
                            pixelLeft.y = j;
                            segundo     = true;


                            //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul
                            //source.SetPixel(j, i, newColor);
                        }
                        //bottom  //ultimo pixel yalido desde eje y
                        pixelRight.x = i;
                        pixelRight.y = j;
                    }
                }
            }
            //dibijar top
            dibujarPunto(source, pixelTop.x, pixelTop.y, System.Drawing.Color.Red);
            //dibujar boottom
            dibujarPunto(source, pixelBottom.x, pixelBottom.y, System.Drawing.Color.Yellow);
            //dibujar left
            dibujarPunto(source, pixelLeft.x, pixelLeft.y, System.Drawing.Color.Brown);
            //dibujar Right
            dibujarPunto(source, pixelRight.x, pixelRight.y, System.Drawing.Color.Chocolate);
            /*Init colores*/
            int tamañoTotalY = pixelBottom.y - pixelTop.y;
            int tamSeccion   = 0;

            if (tamañoTotalY > 0)
            {
                tamSeccion = tamañoTotalY / 3;
            }

            int contador           = 0;
            int tamSeccion1        = tamSeccion * 1;
            int tamSeccion2        = tamSeccion * 2;
            int tamSeccion3        = tamSeccion * 3;
            int totalPixelValidoAP = 0;
            int totalPixelValidoMP = 0;
            int totalPixelValidoRP = 0;

            System.Diagnostics.Debug.WriteLine(" Tamaño seccion:" + tamañoTotalY);
            for (int i = pixelTop.y; i <= pixelBottom.y; i++)
            {
                contador++;
                for (int j = pixelLeft.x; j < pixelRight.x; j++)
                {
                    if (pixelValidoLite(2, source, j, i, source.Width, source.Height))
                    {
                        if (tamSeccion1 >= contador)
                        {//seccion 1
                            dibujarPunto(source, j, i, System.Drawing.Color.Red);
                            totalPixelValidoAP++;
                        }
                        if (contador > tamSeccion1 && tamSeccion2 >= contador)
                        {//seccion 2
                            dibujarPunto(source, j, i, System.Drawing.Color.Blue);
                            totalPixelValidoMP++;
                        }
                        if (contador > tamSeccion2 && tamSeccion3 >= contador)
                        {//seccion 3
                            dibujarPunto(source, j, i, System.Drawing.Color.Green);
                            totalPixelValidoRP++;
                        }
                    }
                }
            }
            double suma = (totalPixelValidoAP + totalPixelValidoMP + totalPixelValidoRP);

            IA = Convert.ToSingle(totalPixelValidoMP / suma);

            System.Diagnostics.Debug.WriteLine("totalPixelValidoAP analisis:" + totalPixelValidoAP);
            System.Diagnostics.Debug.WriteLine("totalPixelValidoMP analisis:" + totalPixelValidoMP);
            System.Diagnostics.Debug.WriteLine("totalPixelValidoRP analisis:" + totalPixelValidoRP);
            System.Diagnostics.Debug.WriteLine("suma IA:" + suma);
            System.Diagnostics.Debug.WriteLine("IA analisis:" + IA);
            /*End colores*/

            //dibujar lineas
            //dibujar linea top
            dibujarLinea(source, pixelRight.x, pixelTop.y, pixelLeft.x, pixelTop.y, System.Drawing.Color.Yellow);
            //dibujar lina bottoom
            dibujarLinea(source, pixelRight.x, pixelBottom.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue);
            //dibujar linera left
            dibujarLinea(source, pixelLeft.x, pixelTop.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Red);
            //digujar linea right
            dibujarLinea(source, pixelRight.x, pixelTop.y, pixelRight.x, pixelBottom.y, System.Drawing.Color.Orange);

            //longitud pie Y
            longitudPieY = pixelBottom.y - pixelTop.y;
            //logitud pie X
            longitudPieX = pixelRight.x - pixelLeft.x;
            return(source);
        }