Ejemplo n.º 1
0
 public void SetLineProfile(Point startRealP, Point endRealP, ControlData condata)
 {
     EqData   = new LineEqData();
     LineData = new LineProfileData();
     XData    = new List <int>();
     YData    = new List <int>();
     InitData(startRealP, endRealP, condata);
 }
Ejemplo n.º 2
0
        void ChangeStartEndYorder(LineProfileData lineData)
        {
            if (lineData.StartPoint.Y > lineData.EndPoint.Y)
            {
                Point startPoint = lineData.EndPoint;
                Point endPoint   = lineData.StartPoint;
                int   startNumX  = lineData.EndNumX;
                int   endnumX    = lineData.StartNumX;
                int   startNumY  = lineData.EndNumY;
                int   endnumY    = lineData.StartNumY;

                lineData.EndPoint   = endPoint;
                lineData.StartPoint = startPoint;
                lineData.EndNumX    = endnumX;
                lineData.StartNumX  = startNumX;
                lineData.EndNumY    = endnumY;
                lineData.StartNumY  = startNumY;
            }
        }
Ejemplo n.º 3
0
        byte[] YOrder(string[,] inputPath, LineProfileData lineData)
        {
            double resultForAssert = lineData.EndPoint.Y - lineData.StartPoint.Y;

            int x    = LineData.StartNumX;
            int y    = LineData.StartNumY;
            int xend = LineData.EndNumX;
            int yend = LineData.EndNumY;

            try
            {
                FormatConvert fcv = new FormatConvert();
                /* y의 끝점이 한개의 이미지의 y끝점에서  안에 있는지, 이미지보다 위로 가는지 아래로 가는지*/
                List <byte> outputlist = new List <byte>();
                int         innerSX    = (int)lineData.StartPoint.X - x * ImgInfo.W;
                int         innerSY    = (int)lineData.StartPoint.Y - y * ImgInfo.H;
                int         innerEY    = (int)lineData.EndPoint.Y - yend * ImgInfo.H;

                while (true)
                {
                    byte[,] data = fcv.Dat2Mat(inputPath[y, x]); // string[row,col] 순 이므로 [y,x] 순이 된다.
                    double By = innerSX - EqData.Ay * innerSY;   // ok

                    if (y == lineData.EndNumY)
                    {
                        if (x == xend)
                        {
                            for (int j = innerSY; j < innerEY; j++)
                            {
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0? (int)(EqData.Ay * j + By - 1): 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            break;
                        }
                        else if (x > xend)
                        {
                            for (int j = innerSY; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + By < 0)
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = ImgInfo.W;
                            x--;
                        }
                        else
                        {
                            for (int j = 0; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + By > ImgInfo.W)
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = 0;
                            x++;
                        }
                    } // Y is in End


                    else if (y == lineData.StartNumY)
                    {
                        if ((EqData.Ay * ImgInfo.H + By) < 0)
                        {
                            for (int j = innerSY; j < ImgInfo.H; j++)
                            {
                                if (EqData.Ay * j + By < 0) // 칸을 넘어갔을경우
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = ImgInfo.W;
                            x--;
                        }
                        else if ((EqData.Ay * ImgInfo.H + By) > ImgInfo.W)
                        {
                            for (int j = 0; j < ImgInfo.H; j++)
                            {
                                if (EqData.Ay * j + By > ImgInfo.W)
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = 0;
                            x++;
                        }
                        else
                        {
                            for (int j = innerSY; j < ImgInfo.H; j++)
                            {
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSY = 0;
                            y++;
                        }
                    }
                    else
                    {
                        if ((EqData.Ay * ImgInfo.H + By) < 0)
                        {
                            for (int j = innerSY; j < ImgInfo.H; j++)
                            {
                                if (EqData.Ay * j + By < 0)
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = ImgInfo.W;
                            x--;
                        }
                        else if ((EqData.Ay * ImgInfo.H + By) > ImgInfo.W)
                        {
                            for (int j = innerSY; j < ImgInfo.H; j++)
                            {
                                if (EqData.Ay * j + By > ImgInfo.W)
                                {
                                    innerSY = j;
                                    break;
                                }
                                int xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSX = 0;
                            x++;
                        }
                        else
                        {
                            int xPos = 0;
                            for (int j = innerSY; j < ImgInfo.H; j++)
                            {
                                xPos = (int)(EqData.Ay * j + By - 1) >= 0 ? (int)(EqData.Ay * j + By - 1) : 0;
                                outputlist.Add(data[j, xPos]);
                            }
                            innerSY = 0;
                            innerSX = xPos;
                            y++;
                        }
                    } // Y is not in End
                }

                /* 하나의 라인데이터가 리스트로 저장이 된다. 이 리스트를 byte[] 로 변환해준다. */

                byte[] output = ConvertList2ByteArr(outputlist);
                Debug.Assert(resultForAssert == output.Length);
                return(output);
            }
            catch (Exception eex)
            {
                Console.WriteLine(eex.ToString());
                return(new byte[0]);
            }
        }
Ejemplo n.º 4
0
        byte[] XOrder(string[,] inputPath, LineProfileData lineData) // lineData 는 문제없음.
        {
            double resultForAssert = lineData.EndPoint.X - lineData.StartPoint.X;


            int x    = LineData.StartNumX;
            int y    = LineData.StartNumY;
            int xend = LineData.EndNumX;
            int yend = LineData.EndNumY;

            try
            {
                FormatConvert fcv        = new FormatConvert();
                List <byte>   outputlist = new List <byte>();
                /* y의 끝점이 한개의 이미지의 y끝점에서  안에 있는지, 이미지보다 위로 가는지 아래로 가는지*/
                int innerSX = (int)lineData.StartPoint.X - x * ImgInfo.W;
                int innerSY = (int)lineData.StartPoint.Y - y * ImgInfo.H;
                int innerEX = (int)lineData.EndPoint.X - xend * ImgInfo.W;

                while (true)
                {
                    byte[,] data = fcv.Dat2Mat(inputPath[y, x]); // string[row,col] 순 이므로 [y,x] 순이 된다.  =>ok
                    double Bx = innerSY - EqData.Ax * innerSX;   //inner 시작점 => ok

                    if (x == lineData.EndNumX)                   // End
                    {
                        if (y == yend)
                        {
                            for (int j = innerSX; j < innerEX; j++)
                            {
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]); // j = x
                            }
                            break;
                        }
                        else if (y > yend)
                        {
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx < 0)
                                {
                                    innerSX = j;
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]); // j = x
                            }
                            innerSY = ImgInfo.H;
                            y--;
                        }
                        else
                        {
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx > ImgInfo.H)
                                {
                                    innerSX = j;
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]);
                            }
                            innerSY = 0;
                            y++;
                        }
                    } // X is in End


                    else if (x == lineData.StartNumX) // Start
                    {
                        if ((EqData.Ax * ImgInfo.W + Bx) < 0)
                        {
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx < 0)
                                {
                                    innerSX = j;
                                    innerSY = (y * ImgInfo.H);
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]); // j = x
                            }
                            innerSY = ImgInfo.H;
                            y--;
                        }
                        else if ((EqData.Ax * ImgInfo.W + Bx) > ImgInfo.H)
                        {
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx > ImgInfo.H)
                                {
                                    innerSX = j;
                                    innerSY = (y * ImgInfo.H);
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]);
                            }
                            innerSY = 0;
                            y++;
                        }
                        else
                        {
                            int yPos = 0;
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]);
                            }
                            innerSX = 0;
                            innerSY = yPos;
                            x++;
                        }
                    }
                    else // Middle
                    {
                        if ((EqData.Ax * ImgInfo.W + Bx) < 0)
                        {
                            for (int j = 0; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx < 0)
                                {
                                    innerSX = j;
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]); // j = x
                            }
                            innerSY = ImgInfo.H;
                            y--;
                        }
                        else if ((EqData.Ax * ImgInfo.W + Bx) > ImgInfo.H)
                        {
                            for (int j = 0; j < ImgInfo.W; j++)
                            {
                                if (EqData.Ax * j + Bx > ImgInfo.H)
                                {
                                    innerSX = j;
                                    break;
                                }
                                int yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]);
                            }
                            innerSY = 0;
                            y++;
                        }
                        else // mid
                        {
                            int yPos = 0;
                            for (int j = innerSX; j < ImgInfo.W; j++)
                            {
                                yPos = (int)(EqData.Ax * j + Bx - 1) >= 0 ? (int)(EqData.Ax * j + Bx - 1) : 0;
                                outputlist.Add(data[yPos, j]);
                            }
                            innerSX = 0;
                            innerSY = yPos;
                            x++;
                        }
                    } // X is not in End
                }


                byte[] output = ConvertList2ByteArr(outputlist);
                Debug.Assert(resultForAssert == output.Length);
                return(output);
            }
            catch (Exception eex)
            {
                MessageBox.Show(eex.ToString());
                return(new byte[0]);
            }
        }