Advertisement
ZrnecX

Untitled

Oct 25th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 16.09 KB | None | 0 0
  1. using EndorMacroSolution.Game;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace EndorMacroSolution.Classes.OCR
  12. {
  13.     class ZrnyBulkOcr
  14.     {
  15.         private Dictionary<Bitmap, string> conversionTable;
  16.  
  17.         Color _defaultCol = Color.Black;
  18.  
  19.         int colorShift = 1; // Na jinnem pc je barva modre posunuta o hodnotu jedné, tohle to zcekne... (+- hodnota)
  20.  
  21.         public ZrnyBulkOcr()
  22.         {
  23.             conversionTable = new Dictionary<Bitmap, string>(); conversionTable.Add(new Bitmap(unifont2._a), "a");
  24.  
  25.             conversionTable.Add(new Bitmap(unifont2._b), "b");
  26.             conversionTable.Add(new Bitmap(unifont2._c), "c");
  27.             conversionTable.Add(new Bitmap(unifont2._d), "d");
  28.             conversionTable.Add(new Bitmap(unifont2._e), "e");
  29.             conversionTable.Add(new Bitmap(unifont2._f), "f");
  30.             conversionTable.Add(new Bitmap(unifont2._g), "g");
  31.             conversionTable.Add(new Bitmap(unifont2._h), "h");
  32.             conversionTable.Add(new Bitmap(unifont2._i), "i");
  33.             conversionTable.Add(new Bitmap(unifont2._j), "j");
  34.             conversionTable.Add(new Bitmap(unifont2._k), "k");
  35.             conversionTable.Add(new Bitmap(unifont2._l), "l");
  36.             conversionTable.Add(new Bitmap(unifont2._m), "m");
  37.             conversionTable.Add(new Bitmap(unifont2._n), "n");
  38.             conversionTable.Add(new Bitmap(unifont2._o), "o");
  39.             conversionTable.Add(new Bitmap(unifont2._p), "p");
  40.             conversionTable.Add(new Bitmap(unifont2._q), "q");
  41.             conversionTable.Add(new Bitmap(unifont2._r), "r");
  42.             conversionTable.Add(new Bitmap(unifont2._s), "s");
  43.             conversionTable.Add(new Bitmap(unifont2._t), "t");
  44.             conversionTable.Add(new Bitmap(unifont2._u), "u");
  45.             conversionTable.Add(new Bitmap(unifont2._v), "v");
  46.             conversionTable.Add(new Bitmap(unifont2._w), "w");
  47.             conversionTable.Add(new Bitmap(unifont2._x), "x");
  48.             conversionTable.Add(new Bitmap(unifont2._y), "y");
  49.             conversionTable.Add(new Bitmap(unifont2._z), "z");
  50.             conversionTable.Add(new Bitmap(unifont2.A), "A");
  51.             conversionTable.Add(new Bitmap(unifont2.B), "B");
  52.             conversionTable.Add(new Bitmap(unifont2.C), "C");
  53.             conversionTable.Add(new Bitmap(unifont2.D), "D");
  54.             conversionTable.Add(new Bitmap(unifont2.E), "E");
  55.             conversionTable.Add(new Bitmap(unifont2.F), "F");
  56.             conversionTable.Add(new Bitmap(unifont2.G), "G");
  57.             conversionTable.Add(new Bitmap(unifont2.H), "H");
  58.             conversionTable.Add(new Bitmap(unifont2.I), "I");
  59.             conversionTable.Add(new Bitmap(unifont2.J), "J");
  60.             conversionTable.Add(new Bitmap(unifont2.K), "K");
  61.             conversionTable.Add(new Bitmap(unifont2.L), "L");
  62.             conversionTable.Add(new Bitmap(unifont2.M), "M");
  63.             conversionTable.Add(new Bitmap(unifont2.N), "N");
  64.             conversionTable.Add(new Bitmap(unifont2.O), "O");
  65.             conversionTable.Add(new Bitmap(unifont2.P), "P");
  66.             conversionTable.Add(new Bitmap(unifont2.Q), "Q");
  67.             conversionTable.Add(new Bitmap(unifont2.R), "R");
  68.             conversionTable.Add(new Bitmap(unifont2.S), "S");
  69.             conversionTable.Add(new Bitmap(unifont2.T), "T");
  70.             conversionTable.Add(new Bitmap(unifont2.U), "U");
  71.             conversionTable.Add(new Bitmap(unifont2.V), "V");
  72.             conversionTable.Add(new Bitmap(unifont2.W), "W");
  73.             conversionTable.Add(new Bitmap(unifont2.X), "X");
  74.             conversionTable.Add(new Bitmap(unifont2.Y), "Y");
  75.             conversionTable.Add(new Bitmap(unifont2.Z), "Z");
  76.  
  77.             conversionTable.Add(new Bitmap(unifont2._0), "0");
  78.             conversionTable.Add(new Bitmap(unifont2._1), "1");
  79.             conversionTable.Add(new Bitmap(unifont2._2), "2");
  80.             conversionTable.Add(new Bitmap(unifont2._3), "3");
  81.             conversionTable.Add(new Bitmap(unifont2._4), "4");
  82.             conversionTable.Add(new Bitmap(unifont2._5), "5");
  83.             conversionTable.Add(new Bitmap(unifont2._6), "6");
  84.             conversionTable.Add(new Bitmap(unifont2._7), "7");
  85.             conversionTable.Add(new Bitmap(unifont2._8), "8");
  86.             conversionTable.Add(new Bitmap(unifont2._9), "9");
  87.  
  88.             conversionTable.Add(new Bitmap(unifont2.amp), "&");
  89.             conversionTable.Add(new Bitmap(unifont2.aquot), ",");
  90.             conversionTable.Add(new Bitmap(unifont2.bquot), "'");
  91.             conversionTable.Add(new Bitmap(unifont2.bslash), "\\");
  92.             conversionTable.Add(new Bitmap(unifont2.colon), ":");
  93.             conversionTable.Add(new Bitmap(unifont2.dollar), "$");
  94.             conversionTable.Add(new Bitmap(unifont2.dquot), "\"");
  95.             conversionTable.Add(new Bitmap(unifont2.eqls), "=");
  96.  
  97.             conversionTable.Add(new Bitmap(unifont2.levazavorka), "(");
  98.             conversionTable.Add(new Bitmap(unifont2.pravazavorka), ")");
  99.             conversionTable.Add(new Bitmap(unifont2.percent), "%");
  100.             conversionTable.Add(new Bitmap(unifont2.plus), "+");
  101.             conversionTable.Add(new Bitmap(unifont2.semicolon), ";");
  102.             conversionTable.Add(new Bitmap(unifont2.sharp), "#");
  103.             conversionTable.Add(new Bitmap(unifont2.slash), "/");
  104.             conversionTable.Add(new Bitmap(unifont2.star), "*");
  105.             conversionTable.Add(new Bitmap(unifont2.vykricnik), "!");
  106.             conversionTable.Add(new Bitmap(unifont2.zavinac), "@");
  107.             conversionTable.Add(new Bitmap(unifont2.dot), ".");
  108.  
  109.             conversionTable.Add(new Bitmap(unifont2.qmark), "?");
  110.  
  111.  
  112.             // Excpeiton items (wands, necklaces etc)
  113.             conversionTable.Add(new Bitmap(exceptionItems._w1), "_w1");
  114.             conversionTable.Add(new Bitmap(exceptionItems._w2), "_w2");
  115.             conversionTable.Add(new Bitmap(exceptionItems._w3), "_w3");
  116.             conversionTable.Add(new Bitmap(exceptionItems._w4), "_w4");
  117.             conversionTable.Add(new Bitmap(exceptionItems._yewtable1), "table");
  118.             conversionTable.Add(new Bitmap(exceptionItems._n1), "_n1");
  119.             conversionTable.Add(new Bitmap(exceptionItems._n2), "_n2");
  120.  
  121.         }
  122.  
  123.         public static Color selectColor(string id)
  124.         {
  125.             //Nadpisy a timeleft je cerna takze 0,0,0
  126.             if (id == "black")
  127.                 return Color.FromArgb(0, 0, 8); //Cerna falesna
  128.             if (id == "pink")
  129.                 return Color.FromArgb(239, 99, 132); //Timeleft po konci
  130.             if (id == "blue")
  131.                 return Color.FromArgb(0, 74, 231); //Jmeno Itemu
  132.             if (id == "blue2")
  133.                 return Color.FromArgb(0, 73, 231); //Jmeno Itemu 2
  134.             if (id == "yellow")
  135.                 return Color.FromArgb(231, 231, 49); //Pocet: nedokonceno
  136.             if (id == "violet")
  137.                 return Color.FromArgb(107, 49, 231); //Pocet: dokonceno
  138.             if (id == "violet2")
  139.                 return Color.FromArgb(107, 48, 231); //Pocet: dokonceno
  140.  
  141.             return Color.FromArgb(0,0,8);
  142.        
  143.         }
  144.  
  145.         public string readSpecialImage(Bitmap readImg)
  146.         {
  147.             CharacterReturn ret = readChar(0, readImg, true);      
  148.  
  149.             return ret.GotChar;
  150.                
  151.         }
  152.  
  153.         public string readImage(Bitmap readImg, Color txtCol)
  154.         {
  155.             string _ret = "";
  156.             int failedChar = 0;
  157.            
  158.             for (int col = 0; col < readImg.Width; col++)
  159.             {
  160.                 CharacterReturn ret = readChar(col, readImg, false ,txtCol);
  161.                 if (ret.GotChar == "")
  162.                 {
  163.                     failedChar += 1;
  164.                     if(failedChar > 7)
  165.                         _ret+=" ";
  166.                     continue;
  167.                 }
  168.                 else
  169.                 {
  170.                     failedChar = 0;
  171.                 }
  172.  
  173.                 _ret += ret.GotChar;
  174.                 col += ret.charHeight;
  175.             }
  176.             _ret = _ret.Trim();
  177.             //new testPic(readImg, _ret, txtCol).ShowDialog();
  178.             return _ret;
  179.         }
  180.  
  181.         private CharacterReturn readChar(int sloupec, Bitmap readImg, bool anyColor = false, Color? gotCol = null)
  182.         {
  183.             int sloupecOffset = 0;
  184.             Color txtCol = gotCol.GetValueOrDefault(Color.Black);
  185.            
  186.  
  187.             //Zjistime vysku a sirku pismena
  188.             int sirka = 0;
  189.             while (true && !anyColor)
  190.             {
  191.                 int tecekOrig = 0;
  192.                 for (int radek = 0; radek < readImg.Height; radek++)
  193.                 {
  194.                     try
  195.                     {
  196.  
  197.  
  198.                         for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
  199.                         {
  200.                             int useG = Math.Max(0,Math.Min(255,GOffset + txtCol.G));
  201.  
  202.                             if (!anyColor && readImg.GetPixel(sloupec + sloupecOffset, radek) == Color.FromArgb(txtCol.R,useG,txtCol.B))
  203.                                 tecekOrig += 1;
  204.  
  205.                         }
  206.                                                
  207.                     }
  208.                     catch(ArgumentOutOfRangeException ex)
  209.                     {
  210.                         var i = ex;
  211.                         ex = i;
  212.                         break;
  213.                     }
  214.                 }
  215.  
  216.                 if (tecekOrig == 0 && sloupecOffset == 0) { return new CharacterReturn("", 1); }
  217.                 if (tecekOrig == 0 && sloupecOffset != 0) { sirka = sloupecOffset; break; }
  218.                 sloupecOffset++;
  219.             }
  220.            
  221.             //zacatek vysky v original img,
  222.             bool gotStart = false;
  223.             int startVyska = 0;
  224.             int vyska = 0;
  225.  
  226.             for (int _cVyska = 0; _cVyska < readImg.Height; _cVyska++)
  227.             {
  228.                 bool obsahuje = false;
  229.  
  230.                 // prohledat radek jestli ma moji barvu
  231.                 for (int _cRadekIdx = 0; _cRadekIdx < sirka; _cRadekIdx++)
  232.                 {
  233.                  
  234.  
  235.  
  236.                     for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
  237.                     {
  238.                         int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
  239.  
  240.                         if (!anyColor && readImg.GetPixel(_cRadekIdx + sloupec, _cVyska) == Color.FromArgb(txtCol.R,useG,txtCol.B))
  241.                         {
  242.                             obsahuje = true;
  243.                         }
  244.  
  245.                     }
  246.  
  247.  
  248.  
  249.                 }
  250.  
  251.                     if (obsahuje)
  252.                     {
  253.                         if (!gotStart)
  254.                         {
  255.                             gotStart = true;
  256.                             startVyska = _cVyska;
  257.                         }
  258.                         vyska = _cVyska - startVyska + 1;
  259.                     }
  260.             }
  261.  
  262.  
  263.             if (anyColor)
  264.             {
  265.                 sirka = readImg.Width;
  266.                 vyska = readImg.Height;
  267.             }
  268.  
  269.             Bitmap _tester = new Bitmap(sirka, vyska);
  270.  
  271.            
  272.             int potrebaShod = 0;
  273.  
  274.             if (!anyColor)
  275.                 for (int naSirku = 0; naSirku < sirka; naSirku++)
  276.                 {
  277.                     for (int naVysku = 0; naVysku < vyska; naVysku++)
  278.                     {
  279.                         try
  280.                         {
  281.  
  282.  
  283.  
  284.                             for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
  285.                             {
  286.                                 int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
  287.  
  288.                                 if (!anyColor && readImg.GetPixel(sloupec + naSirku, naVysku + startVyska) == Color.FromArgb(txtCol.R,useG,txtCol.B))
  289.                                 {
  290.                                     potrebaShod += 1;
  291.                                     _tester.SetPixel(naSirku, naVysku, txtCol);
  292.                                 }
  293.  
  294.                             }
  295.  
  296.  
  297.  
  298.  
  299.                            
  300.                         }
  301.                         catch (ArgumentOutOfRangeException ex)
  302.                         {
  303.                             var i = ex;
  304.                             ex = i;
  305.                             //MessageBox.Show(sloupec.ToString()+" "+(sloupec +naSirku).ToString() + "/" + naVysku.ToString());
  306.                         }
  307.  
  308.                     }
  309.                 }
  310.  
  311.          
  312.            
  313.          
  314.  
  315.  
  316.             foreach (KeyValuePair<Bitmap, string> d in conversionTable)
  317.             {
  318.  
  319.                 if (d.Key.Width != _tester.Width || d.Key.Height != _tester.Height)
  320.                     continue;
  321.  
  322.                 if (anyColor)
  323.                 {
  324.                     potrebaShod = 0;
  325.                     for (int offSirka = 0; offSirka < _tester.Width; offSirka++)
  326.                     {
  327.                         for (int offVyska = 0; offVyska < _tester.Height; offVyska++)
  328.                         {
  329.                             if (d.Key.GetPixel(offSirka, offVyska) != Color.FromArgb(255,255,255,255))
  330.                             {
  331.                                 potrebaShod++;
  332.                             }
  333.                                
  334.                         }
  335.                     }
  336.                 }
  337.  
  338.                 int shod = 0;            
  339.                
  340.                 for (int offSirka = 0; offSirka < _tester.Width; offSirka++)
  341.                 {
  342.                     for (int offVyska = 0; offVyska < _tester.Height; offVyska++)
  343.                     {
  344.  
  345.                         for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
  346.                         {
  347.                             int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
  348.  
  349.                             if (!anyColor && _tester.GetPixel(offSirka, offVyska) == Color.FromArgb(txtCol.R, useG, txtCol.B))
  350.                             {
  351.                                 if (d.Key.GetPixel(offSirka, offVyska) == Color.FromArgb(0, 0, 0))
  352.                                 {
  353.                                     shod++;
  354.                                 }
  355.                             }
  356.  
  357.                         }
  358.  
  359.  
  360.  
  361.                         for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
  362.                         {
  363.  
  364.                             Color Got = readImg.GetPixel(offSirka, offVyska);
  365.                             int useG = Math.Max(0, Math.Min(255, GOffset + Got.G));
  366.  
  367.                            
  368.                                 if (anyColor && d.Key.GetPixel(offSirka, offVyska) != Color.White && d.Key.GetPixel(offSirka, offVyska) == Color.FromArgb(Got.R, useG, Got.B))
  369.                                 {
  370.                                     _tester.SetPixel(offSirka, offVyska, Color.Green);
  371.                                     shod++;
  372.                                 }
  373.  
  374.                         }
  375.                      
  376.                     }
  377.                 }
  378.  
  379.  
  380.                
  381.            
  382.                 if (shod >= potrebaShod)
  383.                     return new CharacterReturn(d.Value, _tester.Width);
  384.                    
  385.             }
  386.  
  387.             return new CharacterReturn("", 1);  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.            
  395.  
  396.        
  397.              
  398.         }
  399.  
  400.            
  401.  
  402.  
  403.         private Bitmap cropRectangle(Bitmap uoimage, int x, int y, int width, int height)
  404.         {
  405.             Bitmap _ret = new Bitmap(width, height);
  406.             Rectangle crop = new Rectangle(x, y, width, height);
  407.  
  408.             using (var gr = Graphics.FromImage(_ret))
  409.             {
  410.                 gr.DrawImage(uoimage, new Rectangle(0, 0, _ret.Width, _ret.Height), crop, GraphicsUnit.Pixel);
  411.             }
  412.             return _ret;
  413.         }
  414.  
  415.  
  416.     }
  417.  
  418.     class CharacterReturn
  419.     {
  420.         public string GotChar;
  421.         public int charHeight;
  422.         public CharacterReturn(string c, int h)
  423.         {
  424.             GotChar = c;
  425.             charHeight = h;
  426.         }
  427.  
  428.     }
  429. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement