public List<CharacterInfo> GetMatchCharacter(List<ConnectedPixel> connectingPixels)
 {
     CharacterPixel characterPixel = new CharacterPixel();
       List<CharacterInfo> characterInfos = new List<CharacterInfo>();
       List<ConnectedPixel> connectedPixels = connectingPixels.FindAll((ConnectedPixel x) => (x.m_width > 18 ? false : x.m_height <= 18));
       foreach (CharacterInfo mCharacterInfo in characterPixel.m_characterInfo)
       {
     foreach (ConnectedPixel connectedPixel in connectedPixels.FindAll((ConnectedPixel x) => (x.m_width != mCharacterInfo.Width || x.m_height != mCharacterInfo.Height ? false : this.MatchPixel(x, mCharacterInfo))))
     {
       CharacterInfo characterInfo = new CharacterInfo()
       {
     m_color = connectedPixel.m_color,
     m_bgColor = connectedPixel.m_bgColor,
     m_fontWeight = mCharacterInfo.m_fontWeight,
     TopYCor = connectedPixel.m_topYCor,
     BottomYCor = connectedPixel.m_bottomYCor,
     LeftXCor = connectedPixel.m_leftXCor,
     RightXCor = connectedPixel.m_rightXCor,
     Width = (byte)connectedPixel.m_width,
     Height = (byte)connectedPixel.m_height,
     CharacterDirection = mCharacterInfo.CharacterDirection,
     Character = mCharacterInfo.Character
       };
       characterInfos.Add(characterInfo);
       connectingPixels.Remove(connectedPixel);
     }
       }
       return characterInfos;
 }
 public List<CharacterInfo> MatchJoinedCharacter(List<ConnectedPixel> connectingPixels)
 {
     List<CharacterInfo> characterInfos = new List<CharacterInfo>();
       CharacterPixel characterPixel = new CharacterPixel();
       foreach (ConnectedPixel connectedPixel in connectingPixels.FindAll((ConnectedPixel x) => (x.m_width <= 6 || x.m_height <= 3 || x.m_width > 25 ? false : x.m_height <= 25)))
       {
     short mLeftXCor = connectedPixel.m_leftXCor;
     short num = connectedPixel.m_leftXCor;
     short num1 = 4;
     while (mLeftXCor <= connectedPixel.m_rightXCor)
     {
       mLeftXCor = (short)(num + num1);
       if (mLeftXCor <= connectedPixel.m_rightXCor + 1)
       {
     List<PixelPoint> pixelPoints = new List<PixelPoint>();
     short num2 = 0;
     short num3 = 0;
     for (int i = 0; i < connectedPixel.m_height; i++)
     {
       bool mPixelCoordinate = true;
       short num4 = 0;
       for (int j = num; j < mLeftXCor; j++)
       {
         mPixelCoordinate = mPixelCoordinate & !connectedPixel.m_pixelCoordinate[j - connectedPixel.m_leftXCor, i];
         if (connectedPixel.m_pixelCoordinate[j - connectedPixel.m_leftXCor, i])
         {
           pixelPoints.Add(new PixelPoint(num4, num2));
         }
         num4 = (short)(num4 + 1);
       }
       if (mPixelCoordinate)
       {
         num3 = (short)(num3 + 1);
       }
       else
       {
         num2 = (short)(num2 + 1);
       }
     }
     pixelPoints.Sort((PixelPoint object1, PixelPoint object2) => object1.XCor.CompareTo(object2.XCor));
     PixelPoint item = pixelPoints[pixelPoints.Count - 1];
     short xCor = item.XCor;
     item = pixelPoints[0];
     short xCor1 = (short)(xCor - item.XCor + 1);
     pixelPoints.Sort((PixelPoint object1, PixelPoint object2) => object1.YCor.CompareTo(object2.YCor));
     item = pixelPoints[pixelPoints.Count - 1];
     short yCor = item.YCor;
     item = pixelPoints[0];
     short yCor1 = (short)(yCor - item.YCor + 1);
     bool[,] flagArray = new bool[xCor1, yCor1];
     foreach (PixelPoint pixelPoint in pixelPoints)
     {
       flagArray[pixelPoint.XCor, pixelPoint.YCor] = true;
     }
     ConnectedPixel connectedPixel1 = new ConnectedPixel()
     {
       m_width = xCor1,
       m_height = yCor1,
       m_pixelCoordinate = flagArray,
       m_color = connectedPixel.m_color
     };
     ConnectedPixel connectedPixel2 = connectedPixel1;
     int num5 = characterPixel.m_characterInfo.FindIndex((CharacterInfo x) => this.MatchPixel(connectedPixel2, x));
     if (num5 == -1)
     {
       num1 = (short)(num1 + 1);
     }
     else
     {
       CharacterInfo characterInfo = new CharacterInfo()
       {
         m_color = connectedPixel2.m_color,
         m_bgColor = connectedPixel.m_bgColor,
         Character = characterPixel.m_characterInfo[num5].Character,
         TopYCor = (short)(connectedPixel.m_topYCor + num3),
         LeftXCor = num,
         BottomYCor = (short)(connectedPixel.m_topYCor + num3 + characterPixel.m_characterInfo[num5].Height - 1),
         RightXCor = (short)(mLeftXCor - 1),
         CharacterDirection = characterPixel.m_characterInfo[num5].CharacterDirection,
         Width = characterPixel.m_characterInfo[num5].Width,
         Height = characterPixel.m_characterInfo[num5].Height
       };
       characterInfos.Add(characterInfo);
       num = mLeftXCor;
       num1 = 4;
     }
     if (num1 > 5)
     {
       break;
     }
       }
       else
       {
     break;
       }
     }
       }
       return characterInfos;
 }
 internal bool MatchPixel(ConnectedPixel connectedElement, CharacterInfo alphabetInfo)
 {
     bool flag;
       if (!(connectedElement.m_pixelCoordinate == null ? false : alphabetInfo.m_pixelCoordinate != null))
       {
     flag = false;
       }
       else if ((alphabetInfo.Width != connectedElement.m_width ? false : alphabetInfo.Height == connectedElement.m_height))
       {
     for (short i = 0; i < alphabetInfo.Width; i = (short)(i + 1))
     {
       short num = 0;
       while (num < alphabetInfo.Height)
       {
     if (alphabetInfo.m_pixelCoordinate[i, num] == connectedElement.m_pixelCoordinate[i, num])
     {
       num = (short)(num + 1);
     }
     else
     {
       flag = false;
       return flag;
     }
       }
     }
     flag = true;
       }
       else
       {
     flag = false;
       }
       return flag;
 }
 internal bool MatchOverlayCharacter(ConnectedPixel connectingPixels, CharacterInfo characterInfo, List<short> diffMarkerXIndex)
 {
     bool flag;
       if ((characterInfo.Width == 0 || connectingPixels.m_width == 0 || characterInfo.Height != connectingPixels.m_height ? false : characterInfo.Width == connectingPixels.m_width))
       {
     short num = 0;
     for (int i = 0; i < characterInfo.Width; i++)
     {
       short num1 = 0;
       int num2 = 0;
       while (num2 < characterInfo.Height)
       {
     if ((connectingPixels.m_pixelCoordinate[i, num2] ? true : !characterInfo.m_pixelCoordinate[num, num1]))
     {
       if (diffMarkerXIndex.FindIndex((short s) => s == i) != -1)
       {
         num1 = (short)(num1 + 1);
       }
       else if (connectingPixels.m_pixelCoordinate[i, num2] == characterInfo.m_pixelCoordinate[num, num1])
       {
         num1 = (short)(num1 + 1);
       }
       else
       {
         flag = false;
         return flag;
       }
       num2++;
     }
     else
     {
       flag = false;
       return flag;
     }
       }
       num = (short)(num + 1);
     }
     flag = true;
       }
       else
       {
     flag = false;
       }
       return flag;
 }
 private void GenerateChracterPixel()
 {
     Regex regex = new Regex("(?<xCor>(\\d)+)[,](?<yCor>(\\d)+)");
       string[] strArrays = new string[] { "TypeOne", "TypeTwo" };
       for (int i = 0; i < (int)strArrays.Length; i++)
       {
     string str = strArrays[i];
     string str1 = str;
     var collection =
     from subitem in this.XmlDoc.Descendants(str).Elements<XElement>("CharacterInfo")
     let xElement = subitem.Element("ParamValue")
     where xElement != null
     let element = subitem.Element("PixelInfo")
     where element != null
     select new { Character = char.Parse(xElement.Value), PixelInfo = element.Value, CharacterDirection = Direction.Horizontal, FontWeight = (str1 == "TypeTwo" ? FontWeight.Bold : FontWeight.Normal), Pixel = regex.Matches(element.Value) };
     foreach (var variable in collection)
     {
       List<PixelPoint> list = (
       from Match oMatch in variable.Pixel
       let xCor = short.Parse(oMatch.Groups["xCor"].Value)
       let yCor = short.Parse(oMatch.Groups["yCor"].Value)
       select new PixelPoint(xCor, yCor)).ToList<PixelPoint>();
       CharacterInfo characterInfo = new CharacterInfo();
       if (list.Count > 0)
       {
     list.Sort((PixelPoint object1, PixelPoint object2) => object1.XCor.CompareTo(object2.XCor));
     PixelPoint item = list[list.Count - 1];
     short num = item.XCor;
     item = list[0];
     byte num1 = (byte)(num - item.XCor + 1);
     list.Sort((PixelPoint object1, PixelPoint object2) => object1.YCor.CompareTo(object2.YCor));
     item = list[list.Count - 1];
     short num2 = item.YCor;
     item = list[0];
     byte num3 = (byte)(num2 - item.YCor + 1);
     bool[,] flagArray = new bool[num1, num3];
     foreach (PixelPoint pixelPoint in list)
     {
       flagArray[pixelPoint.XCor, pixelPoint.YCor] = true;
     }
     characterInfo.Character = variable.Character;
     characterInfo.m_fontWeight = variable.FontWeight;
     characterInfo.CharacterDirection = variable.CharacterDirection;
     characterInfo.m_pixelCoordinate = flagArray;
     characterInfo.Width = num1;
     characterInfo.Height = num3;
     this.m_characterInfo.Add(characterInfo);
     CharacterInfo characterInfo1 = new CharacterInfo()
     {
       Character = variable.Character,
       m_fontWeight = variable.FontWeight,
       CharacterDirection = Direction.Vertical,
       m_pixelCoordinate = CharacterPixel.ChangeOrderVerticalLeftToRight(flagArray),
       Width = num3,
       Height = num1
     };
     characterInfo = characterInfo1;
     this.m_characterInfo.Add(characterInfo);
       }
     }
       }
 }
 private static void CheckSpecialSeperatedDotCharacter(ConnectedPixel connectElement, List<ConnectedPixel> lstConnectedElement, CharacterInfo ibold, CharacterInfo iUnbold, KeyValuePair<short, List<PixelPoint>> currentConnectedpixel)
 {
     bool flag;
       if (connectElement.m_width != 2 || connectElement.m_height != 6)
       {
     flag = (connectElement.m_width != 1 ? true : connectElement.m_height != 6);
       }
       else
       {
     flag = false;
       }
       if (flag)
       {
     List<PixelPoint>.Enumerator enumerator = currentConnectedpixel.Value.GetEnumerator();
     while (enumerator.MoveNext())
     {
       PixelPoint current = enumerator.Current;
       connectElement.m_pixelCoordinate[current.XCor - connectElement.m_leftXCor, current.YCor - connectElement.m_topYCor] = true;
     }
       }
       else
       {
     int num = (connectElement.m_width == 2 ? 2 : 3);
     int num1 = lstConnectedElement.FindIndex((ConnectedPixel x) => (x.m_bottomYCor != connectElement.m_topYCor - num || x.m_leftXCor != connectElement.m_leftXCor || x.m_color.R != connectElement.m_color.R || x.m_color.G != connectElement.m_color.G ? false : x.m_color.B == connectElement.m_color.B));
     if (num1 > -1)
     {
       connectElement.m_height = (short)(connectElement.m_height + num);
       connectElement.m_topYCor = lstConnectedElement[num1].m_topYCor;
       connectElement.m_pixelCoordinate = (connectElement.m_width == 2 ? ibold.m_pixelCoordinate : iUnbold.m_pixelCoordinate);
       lstConnectedElement.RemoveAt(num1);
     }
       }
 }