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); } } }