public List<WordInfo> HorizontalWord(Bitmap bitmap)
 {
     ConnectedCoordinate connectedCoordinate = new ConnectedCoordinate();
       ImageLabeling imageLabeling = new ImageLabeling();
       MatchCharacter matchCharacter = new MatchCharacter();
       Word word = new Word();
       DateTime now = DateTime.Now;
       Dictionary<short, List<PixelPoint>> imageLabel = imageLabeling.GetImageLabel(bitmap);
       TimeSpan timeSpan = DateTime.Now - now;
       //Console.WriteLine("execution time image labeling {0} ms", timeSpan.TotalMilliseconds);
       List<ConnectedPixel> connectedPixel = connectedCoordinate.GetConnectedPixel(bitmap, imageLabel);
       List<CharacterInfo> characterInfos = matchCharacter.GetMatchCharacter(connectedPixel);
       characterInfos.AddRange(matchCharacter.MatchJoinedCharacter(connectedPixel));
       return word.GetHorizontalWord(characterInfos);
 }
        public List <WordInfo> HorizontalWord(Bitmap bitmap)
        {
            ConnectedCoordinate connectedCoordinate = new ConnectedCoordinate();
            ImageLabeling       imageLabeling       = new ImageLabeling();
            MatchCharacter      matchCharacter      = new MatchCharacter();
            Word     word = new Word();
            DateTime now  = DateTime.Now;
            Dictionary <short, List <PixelPoint> > imageLabel = imageLabeling.GetImageLabel(bitmap);
            TimeSpan timeSpan = DateTime.Now - now;
            //Console.WriteLine("execution time image labeling {0} ms", timeSpan.TotalMilliseconds);
            List <ConnectedPixel> connectedPixel = connectedCoordinate.GetConnectedPixel(bitmap, imageLabel);
            List <CharacterInfo>  characterInfos = matchCharacter.GetMatchCharacter(connectedPixel);

            characterInfos.AddRange(matchCharacter.MatchJoinedCharacter(connectedPixel));
            return(word.GetHorizontalWord(characterInfos));
        }
Exemple #3
0
        internal Dictionary <short, List <PixelPoint> > GetImageLabel(Bitmap bitmap)
        {
            byte[] numArray;
            int    num;
            int    num1;
            short  i;
            short  j;
            short  num2;

            ImageLabeling.GetRgbArrayFromImage(bitmap, out numArray, out num, out num1);
            List <PixelPoint> pixelPoints = new List <PixelPoint>()
            {
                new PixelPoint(-1, -1),
                new PixelPoint(0, -1),
                new PixelPoint(1, -1),
                new PixelPoint(-1, 0),
                new PixelPoint(1, 0),
                new PixelPoint(-1, 1),
                new PixelPoint(0, 1),
                new PixelPoint(1, 1)
            };
            List <PixelPoint> pixelPoints1 = pixelPoints;
            short             width        = (short)(bitmap.Width * 3);

            short[,] numArray1 = new short[bitmap.Width, bitmap.Height];
            short num3 = 1;
            Dictionary <short, List <short> > nums = new Dictionary <short, List <short> >();

            for (i = 1; i < bitmap.Height - 1; i = (short)(i + 1))
            {
                for (j = 3; j < bitmap.Width - 3; j = (short)(j + 1))
                {
                    List <short> nums1     = new List <short>();
                    int          num4      = i * width + j * 3 + i * num1;
                    byte[]       numArray2 = new byte[] { numArray[num4 + 2], numArray[num4 + 1], numArray[num4] };
                    byte[]       numArray3 = numArray2;
                    PxColor      pxColor   = new PxColor()
                    {
                        R = numArray3[0],
                        G = numArray3[1],
                        B = numArray3[2]
                    };
                    num2 = 32767;
                    List <PixelPoint> .Enumerator enumerator = pixelPoints1.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        PixelPoint current = enumerator.Current;
                        short      yCor    = (short)(current.YCor + i);
                        short      xCor    = (short)(current.XCor + j);
                        int        num5    = yCor * width + xCor * 3 + yCor * num1;
                        numArray2 = new byte[] { numArray[num5 + 2], numArray[num5 + 1], numArray[num5] };
                        byte[] numArray4 = numArray2;
                        if ((numArray3[0] != numArray4[0] || numArray3[1] != numArray4[1] ? false : numArray3[2] == numArray4[2]))
                        {
                            if ((numArray1[xCor, yCor] == 0 ? false : !nums1.Contains(numArray1[xCor, yCor])))
                            {
                                num2 = Math.Min(num2, numArray1[xCor, yCor]);
                                nums1.Add(numArray1[xCor, yCor]);
                            }
                        }
                    }
                    if (num2 == 32767)
                    {
                        short num6 = num3;
                        num3 = (short)(num6 + 1);
                        num2 = num6;
                    }
                    numArray1[j, i] = num2;
                    if (!nums.ContainsKey(num2))
                    {
                        nums.Add(num2, new List <short>());
                    }
                    foreach (short num7 in nums1)
                    {
                        if (!nums[num2].Contains(num7))
                        {
                            nums[num2].Add(num7);
                        }
                        if (!nums.ContainsKey(num7))
                        {
                            nums.Add(num7, new List <short>());
                        }
                        if (!nums[num7].Contains(num2))
                        {
                            nums[num7].Add(num2);
                        }
                    }
                }
            }
            Dictionary <short, short> nums2 = ImageLabeling.RecordEquailance(nums, num3);

            nums.Clear();
            Dictionary <short, List <PixelPoint> > nums3 = new Dictionary <short, List <PixelPoint> >();

            for (i = 0; i < bitmap.Height; i = (short)(i + 1))
            {
                for (j = 0; j < bitmap.Width; j = (short)(j + 1))
                {
                    num2 = (nums2.ContainsKey(numArray1[j, i]) ? nums2[numArray1[j, i]] : numArray1[j, i]);
                    if (!nums3.ContainsKey(num2))
                    {
                        nums3.Add(num2, new List <PixelPoint>());
                    }
                    nums3[num2].Add(new PixelPoint(j, i));
                }
            }
            return(nums3);
        }
        internal List <ConnectedPixel> GetConnectedPixel(Bitmap bitmap, Dictionary <short, List <PixelPoint> > dicPixelPointConncected)
        {
            byte[] numArray;
            int    num;
            int    num1;

            ImageLabeling.GetRgbArrayFromImage(bitmap, out numArray, out num, out num1);
            List <ConnectedPixel> connectedPixels = new List <ConnectedPixel>();
            short          width          = (short)(bitmap.Width * 3);
            CharacterPixel characterPixel = new CharacterPixel();
            CharacterInfo  characterInfo  = characterPixel.m_characterInfo.Find((CharacterInfo x) => (x.CharacterDirection != Direction.Horizontal || x.Character != 'i' ? false : x.m_fontWeight == FontWeight.Bold));
            CharacterInfo  characterInfo1 = characterPixel.m_characterInfo.Find((CharacterInfo x) => (x.CharacterDirection != Direction.Horizontal || x.Character != 'i' ? false : x.m_fontWeight == FontWeight.Normal));

            characterPixel.m_characterInfo.RemoveAll((CharacterInfo x) => (x == characterInfo ? false : x != characterInfo1));
            foreach (KeyValuePair <short, List <PixelPoint> > keyValuePair in dicPixelPointConncected)
            {
                if (keyValuePair.Value.Count <= 4000)
                {
                    keyValuePair.Value.Sort((PixelPoint sObject1, PixelPoint sObject2) => sObject1.YCor.CompareTo(sObject2.YCor));
                    PixelPoint pixelPoint = keyValuePair.Value.FirstOrDefault <PixelPoint>();
                    int        yCor       = pixelPoint.YCor;
                    pixelPoint = keyValuePair.Value.LastOrDefault <PixelPoint>();
                    int yCor1 = pixelPoint.YCor;
                    keyValuePair.Value.Sort((PixelPoint sObject1, PixelPoint sObject2) => sObject1.XCor.CompareTo(sObject2.XCor));
                    pixelPoint = keyValuePair.Value.FirstOrDefault <PixelPoint>();
                    int xCor = pixelPoint.XCor;
                    pixelPoint = keyValuePair.Value.LastOrDefault <PixelPoint>();
                    int xCor1 = pixelPoint.XCor;
                    pixelPoint = keyValuePair.Value.First <PixelPoint>();
                    int yCor2 = pixelPoint.YCor * width; // was short why?
                    pixelPoint = keyValuePair.Value.First <PixelPoint>();
                    int xCor2 = yCor2 + pixelPoint.XCor * 3;
                    pixelPoint = keyValuePair.Value.First <PixelPoint>();
                    int            num2           = xCor2 + pixelPoint.YCor * num1;
                    short          num3           = (short)(xCor1 - xCor + 1);
                    short          num4           = (short)(yCor1 - yCor + 1);
                    ConnectedPixel connectedPixel = new ConnectedPixel()
                    {
                        m_pixelCoordinate = new bool[num3, num4]
                    };
                    PxColor pxColor = new PxColor()
                    {
                        R = numArray[num2 + 2],
                        G = numArray[num2 + 1],
                        B = numArray[num2]
                    };
                    connectedPixel.m_color      = pxColor;
                    connectedPixel.m_height     = num4;
                    connectedPixel.m_width      = num3;
                    connectedPixel.m_topYCor    = (short)yCor;
                    connectedPixel.m_bottomYCor = (short)yCor1;
                    connectedPixel.m_leftXCor   = (short)xCor;
                    connectedPixel.m_rightXCor  = (short)xCor1;
                    ConnectedPixel connectedPixel1 = connectedPixel;
                    ConnectedCoordinate.CheckSpecialSeperatedDotCharacter(connectedPixel1, connectedPixels, characterInfo, characterInfo1, keyValuePair);
                    ConnectedCoordinate.GetbackgroundColor(connectedPixel1, ref numArray, width, num1);
                    connectedPixels.Add(connectedPixel1);
                }
            }
            return(connectedPixels);
        }