Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using EndorMacroSolution.Game;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace EndorMacroSolution.Classes.OCR
- {
- class ZrnyBulkOcr
- {
- private Dictionary<Bitmap, string> conversionTable;
- Color _defaultCol = Color.Black;
- int colorShift = 1; // Na jinnem pc je barva modre posunuta o hodnotu jedné, tohle to zcekne... (+- hodnota)
- public ZrnyBulkOcr()
- {
- conversionTable = new Dictionary<Bitmap, string>(); conversionTable.Add(new Bitmap(unifont2._a), "a");
- conversionTable.Add(new Bitmap(unifont2._b), "b");
- conversionTable.Add(new Bitmap(unifont2._c), "c");
- conversionTable.Add(new Bitmap(unifont2._d), "d");
- conversionTable.Add(new Bitmap(unifont2._e), "e");
- conversionTable.Add(new Bitmap(unifont2._f), "f");
- conversionTable.Add(new Bitmap(unifont2._g), "g");
- conversionTable.Add(new Bitmap(unifont2._h), "h");
- conversionTable.Add(new Bitmap(unifont2._i), "i");
- conversionTable.Add(new Bitmap(unifont2._j), "j");
- conversionTable.Add(new Bitmap(unifont2._k), "k");
- conversionTable.Add(new Bitmap(unifont2._l), "l");
- conversionTable.Add(new Bitmap(unifont2._m), "m");
- conversionTable.Add(new Bitmap(unifont2._n), "n");
- conversionTable.Add(new Bitmap(unifont2._o), "o");
- conversionTable.Add(new Bitmap(unifont2._p), "p");
- conversionTable.Add(new Bitmap(unifont2._q), "q");
- conversionTable.Add(new Bitmap(unifont2._r), "r");
- conversionTable.Add(new Bitmap(unifont2._s), "s");
- conversionTable.Add(new Bitmap(unifont2._t), "t");
- conversionTable.Add(new Bitmap(unifont2._u), "u");
- conversionTable.Add(new Bitmap(unifont2._v), "v");
- conversionTable.Add(new Bitmap(unifont2._w), "w");
- conversionTable.Add(new Bitmap(unifont2._x), "x");
- conversionTable.Add(new Bitmap(unifont2._y), "y");
- conversionTable.Add(new Bitmap(unifont2._z), "z");
- conversionTable.Add(new Bitmap(unifont2.A), "A");
- conversionTable.Add(new Bitmap(unifont2.B), "B");
- conversionTable.Add(new Bitmap(unifont2.C), "C");
- conversionTable.Add(new Bitmap(unifont2.D), "D");
- conversionTable.Add(new Bitmap(unifont2.E), "E");
- conversionTable.Add(new Bitmap(unifont2.F), "F");
- conversionTable.Add(new Bitmap(unifont2.G), "G");
- conversionTable.Add(new Bitmap(unifont2.H), "H");
- conversionTable.Add(new Bitmap(unifont2.I), "I");
- conversionTable.Add(new Bitmap(unifont2.J), "J");
- conversionTable.Add(new Bitmap(unifont2.K), "K");
- conversionTable.Add(new Bitmap(unifont2.L), "L");
- conversionTable.Add(new Bitmap(unifont2.M), "M");
- conversionTable.Add(new Bitmap(unifont2.N), "N");
- conversionTable.Add(new Bitmap(unifont2.O), "O");
- conversionTable.Add(new Bitmap(unifont2.P), "P");
- conversionTable.Add(new Bitmap(unifont2.Q), "Q");
- conversionTable.Add(new Bitmap(unifont2.R), "R");
- conversionTable.Add(new Bitmap(unifont2.S), "S");
- conversionTable.Add(new Bitmap(unifont2.T), "T");
- conversionTable.Add(new Bitmap(unifont2.U), "U");
- conversionTable.Add(new Bitmap(unifont2.V), "V");
- conversionTable.Add(new Bitmap(unifont2.W), "W");
- conversionTable.Add(new Bitmap(unifont2.X), "X");
- conversionTable.Add(new Bitmap(unifont2.Y), "Y");
- conversionTable.Add(new Bitmap(unifont2.Z), "Z");
- conversionTable.Add(new Bitmap(unifont2._0), "0");
- conversionTable.Add(new Bitmap(unifont2._1), "1");
- conversionTable.Add(new Bitmap(unifont2._2), "2");
- conversionTable.Add(new Bitmap(unifont2._3), "3");
- conversionTable.Add(new Bitmap(unifont2._4), "4");
- conversionTable.Add(new Bitmap(unifont2._5), "5");
- conversionTable.Add(new Bitmap(unifont2._6), "6");
- conversionTable.Add(new Bitmap(unifont2._7), "7");
- conversionTable.Add(new Bitmap(unifont2._8), "8");
- conversionTable.Add(new Bitmap(unifont2._9), "9");
- conversionTable.Add(new Bitmap(unifont2.amp), "&");
- conversionTable.Add(new Bitmap(unifont2.aquot), ",");
- conversionTable.Add(new Bitmap(unifont2.bquot), "'");
- conversionTable.Add(new Bitmap(unifont2.bslash), "\\");
- conversionTable.Add(new Bitmap(unifont2.colon), ":");
- conversionTable.Add(new Bitmap(unifont2.dollar), "$");
- conversionTable.Add(new Bitmap(unifont2.dquot), "\"");
- conversionTable.Add(new Bitmap(unifont2.eqls), "=");
- conversionTable.Add(new Bitmap(unifont2.levazavorka), "(");
- conversionTable.Add(new Bitmap(unifont2.pravazavorka), ")");
- conversionTable.Add(new Bitmap(unifont2.percent), "%");
- conversionTable.Add(new Bitmap(unifont2.plus), "+");
- conversionTable.Add(new Bitmap(unifont2.semicolon), ";");
- conversionTable.Add(new Bitmap(unifont2.sharp), "#");
- conversionTable.Add(new Bitmap(unifont2.slash), "/");
- conversionTable.Add(new Bitmap(unifont2.star), "*");
- conversionTable.Add(new Bitmap(unifont2.vykricnik), "!");
- conversionTable.Add(new Bitmap(unifont2.zavinac), "@");
- conversionTable.Add(new Bitmap(unifont2.dot), ".");
- conversionTable.Add(new Bitmap(unifont2.qmark), "?");
- // Excpeiton items (wands, necklaces etc)
- conversionTable.Add(new Bitmap(exceptionItems._w1), "_w1");
- conversionTable.Add(new Bitmap(exceptionItems._w2), "_w2");
- conversionTable.Add(new Bitmap(exceptionItems._w3), "_w3");
- conversionTable.Add(new Bitmap(exceptionItems._w4), "_w4");
- conversionTable.Add(new Bitmap(exceptionItems._yewtable1), "table");
- conversionTable.Add(new Bitmap(exceptionItems._n1), "_n1");
- conversionTable.Add(new Bitmap(exceptionItems._n2), "_n2");
- }
- public static Color selectColor(string id)
- {
- //Nadpisy a timeleft je cerna takze 0,0,0
- if (id == "black")
- return Color.FromArgb(0, 0, 8); //Cerna falesna
- if (id == "pink")
- return Color.FromArgb(239, 99, 132); //Timeleft po konci
- if (id == "blue")
- return Color.FromArgb(0, 74, 231); //Jmeno Itemu
- if (id == "blue2")
- return Color.FromArgb(0, 73, 231); //Jmeno Itemu 2
- if (id == "yellow")
- return Color.FromArgb(231, 231, 49); //Pocet: nedokonceno
- if (id == "violet")
- return Color.FromArgb(107, 49, 231); //Pocet: dokonceno
- if (id == "violet2")
- return Color.FromArgb(107, 48, 231); //Pocet: dokonceno
- return Color.FromArgb(0,0,8);
- }
- public string readSpecialImage(Bitmap readImg)
- {
- CharacterReturn ret = readChar(0, readImg, true);
- return ret.GotChar;
- }
- public string readImage(Bitmap readImg, Color txtCol)
- {
- string _ret = "";
- int failedChar = 0;
- for (int col = 0; col < readImg.Width; col++)
- {
- CharacterReturn ret = readChar(col, readImg, false ,txtCol);
- if (ret.GotChar == "")
- {
- failedChar += 1;
- if(failedChar > 7)
- _ret+=" ";
- continue;
- }
- else
- {
- failedChar = 0;
- }
- _ret += ret.GotChar;
- col += ret.charHeight;
- }
- _ret = _ret.Trim();
- //new testPic(readImg, _ret, txtCol).ShowDialog();
- return _ret;
- }
- private CharacterReturn readChar(int sloupec, Bitmap readImg, bool anyColor = false, Color? gotCol = null)
- {
- int sloupecOffset = 0;
- Color txtCol = gotCol.GetValueOrDefault(Color.Black);
- //Zjistime vysku a sirku pismena
- int sirka = 0;
- while (true && !anyColor)
- {
- int tecekOrig = 0;
- for (int radek = 0; radek < readImg.Height; radek++)
- {
- try
- {
- for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
- {
- int useG = Math.Max(0,Math.Min(255,GOffset + txtCol.G));
- if (!anyColor && readImg.GetPixel(sloupec + sloupecOffset, radek) == Color.FromArgb(txtCol.R,useG,txtCol.B))
- tecekOrig += 1;
- }
- }
- catch(ArgumentOutOfRangeException ex)
- {
- var i = ex;
- ex = i;
- break;
- }
- }
- if (tecekOrig == 0 && sloupecOffset == 0) { return new CharacterReturn("", 1); }
- if (tecekOrig == 0 && sloupecOffset != 0) { sirka = sloupecOffset; break; }
- sloupecOffset++;
- }
- //zacatek vysky v original img,
- bool gotStart = false;
- int startVyska = 0;
- int vyska = 0;
- for (int _cVyska = 0; _cVyska < readImg.Height; _cVyska++)
- {
- bool obsahuje = false;
- // prohledat radek jestli ma moji barvu
- for (int _cRadekIdx = 0; _cRadekIdx < sirka; _cRadekIdx++)
- {
- for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
- {
- int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
- if (!anyColor && readImg.GetPixel(_cRadekIdx + sloupec, _cVyska) == Color.FromArgb(txtCol.R,useG,txtCol.B))
- {
- obsahuje = true;
- }
- }
- }
- if (obsahuje)
- {
- if (!gotStart)
- {
- gotStart = true;
- startVyska = _cVyska;
- }
- vyska = _cVyska - startVyska + 1;
- }
- }
- if (anyColor)
- {
- sirka = readImg.Width;
- vyska = readImg.Height;
- }
- Bitmap _tester = new Bitmap(sirka, vyska);
- int potrebaShod = 0;
- if (!anyColor)
- for (int naSirku = 0; naSirku < sirka; naSirku++)
- {
- for (int naVysku = 0; naVysku < vyska; naVysku++)
- {
- try
- {
- for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
- {
- int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
- if (!anyColor && readImg.GetPixel(sloupec + naSirku, naVysku + startVyska) == Color.FromArgb(txtCol.R,useG,txtCol.B))
- {
- potrebaShod += 1;
- _tester.SetPixel(naSirku, naVysku, txtCol);
- }
- }
- }
- catch (ArgumentOutOfRangeException ex)
- {
- var i = ex;
- ex = i;
- //MessageBox.Show(sloupec.ToString()+" "+(sloupec +naSirku).ToString() + "/" + naVysku.ToString());
- }
- }
- }
- foreach (KeyValuePair<Bitmap, string> d in conversionTable)
- {
- if (d.Key.Width != _tester.Width || d.Key.Height != _tester.Height)
- continue;
- if (anyColor)
- {
- potrebaShod = 0;
- for (int offSirka = 0; offSirka < _tester.Width; offSirka++)
- {
- for (int offVyska = 0; offVyska < _tester.Height; offVyska++)
- {
- if (d.Key.GetPixel(offSirka, offVyska) != Color.FromArgb(255,255,255,255))
- {
- potrebaShod++;
- }
- }
- }
- }
- int shod = 0;
- for (int offSirka = 0; offSirka < _tester.Width; offSirka++)
- {
- for (int offVyska = 0; offVyska < _tester.Height; offVyska++)
- {
- for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
- {
- int useG = Math.Max(0, Math.Min(255, GOffset + txtCol.G));
- if (!anyColor && _tester.GetPixel(offSirka, offVyska) == Color.FromArgb(txtCol.R, useG, txtCol.B))
- {
- if (d.Key.GetPixel(offSirka, offVyska) == Color.FromArgb(0, 0, 0))
- {
- shod++;
- }
- }
- }
- for (int GOffset = -colorShift; GOffset <= colorShift; GOffset++)
- {
- Color Got = readImg.GetPixel(offSirka, offVyska);
- int useG = Math.Max(0, Math.Min(255, GOffset + Got.G));
- if (anyColor && d.Key.GetPixel(offSirka, offVyska) != Color.White && d.Key.GetPixel(offSirka, offVyska) == Color.FromArgb(Got.R, useG, Got.B))
- {
- _tester.SetPixel(offSirka, offVyska, Color.Green);
- shod++;
- }
- }
- }
- }
- if (shod >= potrebaShod)
- return new CharacterReturn(d.Value, _tester.Width);
- }
- return new CharacterReturn("", 1);
- }
- private Bitmap cropRectangle(Bitmap uoimage, int x, int y, int width, int height)
- {
- Bitmap _ret = new Bitmap(width, height);
- Rectangle crop = new Rectangle(x, y, width, height);
- using (var gr = Graphics.FromImage(_ret))
- {
- gr.DrawImage(uoimage, new Rectangle(0, 0, _ret.Width, _ret.Height), crop, GraphicsUnit.Pixel);
- }
- return _ret;
- }
- }
- class CharacterReturn
- {
- public string GotChar;
- public int charHeight;
- public CharacterReturn(string c, int h)
- {
- GotChar = c;
- charHeight = h;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement