//void cboWindows_SelectedIndexChanged(object sender, EventArgs e) //{ // Window w = (Window)cboWindows.SelectedItem; // if (thumb != IntPtr.Zero) // DwmUnregisterThumbnail(thumb); // int i = DwmRegisterThumbnail(this.Handle, w.Handle, out thumb); // if (i == 0) // UpdateThumb(); //} void InitMacro() { Module.Handling.Imaging.ImageRange range = new Imaging.ImageRange(400, 525); dictRange.Add("이적시장_버튼", range); range = new Imaging.ImageRange(211 - 50, 125 - 50); dictRange.Add("이적시장_즐겨찾기_버튼", range); }
private string GetOCR(Bitmap big, Imaging.ImageRange range, bool flag = true) { Point p = new Point(); int width = 0; int height = 0; p.X = range.loc.X; p.Y = range.loc.Y; width = range.width; height = range.height; big = Imaging.CropImage(big, p, width, height); big = Imaging.ConvertFormat(big, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); if (!flag) { big = Imaging.MakeGrayscale3(big); } //; else { big = grayscale(big); } //tessnet2.Tesseract api = new tessnet2.Tesseract(); //api.Init() OcrApi.PathToEngine = Environment.CurrentDirectory + @"\tesseract.dll"; OcrApi api = OcrApi.Create(); Languages[] lang = { Languages.English }; api.Init(lang, null, OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED); api.SetVariable("tessedit_char_whitelist", "0123456789"); string plainText = api.GetTextFromImage(big); ////Console.WriteLine(plainText); ////this.Invoke(new MethodInvoker(delegate() { txtLog.AppendText(plainText + Environment.NewLine); })); api.Dispose(); api = null; System.GC.Collect(0, GCCollectionMode.Forced); System.GC.WaitForPendingFinalizers(); return(plainText); //return ""; }
void Init() { timer.Interval = 1000; timer.Tick += timer_Tick; ResourceSet set = global::Module.Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true); foreach (DictionaryEntry item in set) { if (item.Value is Bitmap) { dictImage.Add(item.Key.ToString(), (Bitmap)item.Value); } } Imaging.ImageRange range = new Imaging.ImageRange(0, 35, 483, 100); //dictRange.Add("모바일_메인화면", range); //dictRange.Add("모바일_상점", range); //dictRange.Add("모바일_선수영입", range); //dictRange.Add("모바일_이적시장", range); //dictRange.Add("모바일_트레이드", range); //range = new Imaging.ImageRange(147, 129, 210, 47); //dictRange.Add("모바일_상점_구입하기", range); //range = new Imaging.ImageRange(27, 172, 171, 235); //dictRange.Add("모바일_상점_이용권", range); //range = new Imaging.ImageRange(35, 125, 411, 51); //dictRange.Add("모바일_상점_구입완료", range); //range = new Imaging.ImageRange(99, 291, 295, 43); //dictRange.Add("모바일_상점_구매수", range); //range = new Imaging.ImageRange(207, 127, 277, 69); //dictRange.Add("모바일_선수영입_일반선수", range); //range = new Imaging.ImageRange(70, 645, 350, 70); //dictRange.Add("모바일_선수영입_프리미엄선수", range); //range = new Imaging.ImageRange(30, 320, 455, 75); //dictRange.Add("모바일_선수영입_공간필요", range); //range = new Imaging.ImageRange(0, 690, 484, 67); //dictRange.Add("모바일_선수영입_이용권소진", range); range = new Imaging.ImageRange(250, 214, 67, 25); dictRange.Add("모바일_트레이드_재료선수1", range); range = new Imaging.ImageRange(250, 243, 67, 25); dictRange.Add("모바일_트레이드_재료선수2", range); range = new Imaging.ImageRange(250, 272, 67, 30); dictRange.Add("모바일_트레이드_재료선수3", range); range = new Imaging.ImageRange(250, 300, 67, 30); dictRange.Add("모바일_트레이드_재료선수4", range); range = new Imaging.ImageRange(250, 328, 67, 30); dictRange.Add("모바일_트레이드_재료선수5", range); range = new Imaging.ImageRange(250, 356, 67, 30); dictRange.Add("모바일_트레이드_재료선수6", range); range = new Imaging.ImageRange(250, 383, 67, 30); dictRange.Add("모바일_트레이드_재료선수7", range); range = new Imaging.ImageRange(250, 413, 67, 30); dictRange.Add("모바일_트레이드_재료선수8", range); //range = new Imaging.ImageRange(250, 300, 221, 43); //dictRange.Add("모바일_트레이드_트레이드실행", range); //range = new Imaging.ImageRange(135, 765, 230, 55); //dictRange.Add("모바일_트레이드_확인하기", range); //range = new Imaging.ImageRange(170, 65, 155, 45); //dictRange.Add("모바일_트레이드_선수트레이드", range); range = new Imaging.ImageRange(170, 186, 51, 11); dictRange.Add("모바일_트레이드_선수1가격_1", range); range = new Imaging.ImageRange(170, 199, 51, 11); dictRange.Add("모바일_트레이드_선수1가격_2", range); range = new Imaging.ImageRange(170, 254, 51, 11); dictRange.Add("모바일_트레이드_선수2가격_1", range); range = new Imaging.ImageRange(170, 266, 51, 11); dictRange.Add("모바일_트레이드_선수2가격_2", range); range = new Imaging.ImageRange(170, 320, 51, 11); dictRange.Add("모바일_트레이드_선수3가격_1", range); range = new Imaging.ImageRange(170, 332, 51, 11); dictRange.Add("모바일_트레이드_선수3가격_2", range); //range = new Imaging.ImageRange(163, 63, 165, 41); //dictRange.Add("모바일_트레이드_트레이드결과", range); //range = new Imaging.ImageRange(100, 590, 295, 238); //dictRange.Add("모바일_트레이드_재협상", range); //range = new Imaging.ImageRange(345, 300, 140, 60); //dictRange.Add("모바일_이적시장_판매", range); //range = new Imaging.ImageRange(147, 75, 313, 48); //dictRange.Add("모바일_이적시장_판매등록", range); //range = new Imaging.ImageRange(175, 315, 154, 67); //dictRange.Add("모바일_이적시장_등록초과", range); //range = new Imaging.ImageRange(25, 675, 433, 81); //dictRange.Add("모바일_이적시장_판매대기", range); range = new Imaging.ImageRange(130, 215, 160, 25); dictRange.Add("모바일_이적시장_판매가격", range); //range = new Imaging.ImageRange(355, 300, 105, 37); //dictRange.Add("모바일_이적시장_모두받기", range); //range = new Imaging.ImageRange(250, 580, 170, 37); //dictRange.Add("모바일_이적시장_모두받기_받기", range); //range = new Imaging.ImageRange(150, 400, 290, 42); //dictRange.Add("모바일_이적시장_금액확인", range); dictPoint.Add("모바일_상점_클릭", new Point(240, 460)); dictPoint.Add("모바일_단품_클릭", new Point(163, 337)); dictPoint.Add("모바일_선수영입_클릭", new Point(260, 275)); dictPoint.Add("모바일_구단관리_클릭", new Point(83, 460)); dictPoint.Add("모바일_트레이드_클릭", new Point(260, 335)); dictPoint.Add("모바일_이적시장_클릭", new Point(135, 460)); dictPoint.Add("모바일_판매_클릭", new Point(160, 400)); dictPoint.Add("모바일_선수영입_일반선수_클릭", new Point(240, 75)); dictPoint.Add("모바일_선수영입_영입_클릭", new Point(225, 415)); dictPoint.Add("모바일_선수영입_공간필요닫기_클릭", new Point(100, 285)); dictPoint.Add("모바일_트레이드_재료선수1_클릭", new Point(222, 225)); dictPoint.Add("모바일_트레이드_재료선수2_클릭", new Point(222, 255)); dictPoint.Add("모바일_트레이드_재료선수3_클릭", new Point(222, 285)); dictPoint.Add("모바일_트레이드_재료선수4_클릭", new Point(222, 310)); dictPoint.Add("모바일_트레이드_재료선수5_클릭", new Point(222, 340)); dictPoint.Add("모바일_트레이드_재료선수6_클릭", new Point(222, 370)); dictPoint.Add("모바일_트레이드_재료선수7_클릭", new Point(222, 400)); dictPoint.Add("모바일_트레이드_재료선수8_클릭", new Point(222, 430)); dictPoint.Add("모바일_트레이드_트레이드실행_클릭", new Point(245, 170)); dictPoint.Add("모바일_트레이드_확인하기_클릭", new Point(235, 455)); dictPoint.Add("모바일_트레이드_선수1_클릭", new Point(185, 190)); dictPoint.Add("모바일_트레이드_선수2_클릭", new Point(185, 255)); //dictPoint.Add("모바일_트레이드_선수3_클릭", new Point(160, 525)); dictPoint.Add("모바일_트레이드_트레이드실행2_클릭", new Point(235, 455)); dictPoint.Add("모바일_트레이드_완료_클릭", new Point(30, 25)); dictPoint.Add("모바일_트레이드_초기화_클릭", new Point(80, 170)); dictPoint.Add("모바일_트레이드_재협상취소_클릭", new Point(110, 340)); dictPoint.Add("모바일_트레이드_계속진행취소_클릭", new Point(68, 285)); dictPoint.Add("모바일_이적시장_판매목록_클릭", new Point(215, 70)); dictPoint.Add("모바일_이적시장_판매등록화면_클릭", new Point(110, 70)); dictPoint.Add("모바일_이적시장_모두받기_클릭", new Point(270, 170)); dictPoint.Add("모바일_이적시장_모두받기_받기_클릭", new Point(225, 335)); dictPoint.Add("모바일_이적시장_첫선수_클릭", new Point(185, 230)); dictPoint.Add("모바일_이적시장_판매_클릭", new Point(270, 170)); dictPoint.Add("모바일_이적시장_판매2_클릭", new Point(225, 405)); dictPoint.Add("모바일_이적시장_판매확인_클릭", new Point(160, 405)); dictPoint.Add("모바일_이적시장_취소_클릭", new Point(100, 405)); dictPoint.Add("모바일_이적시장_등록초과확인_클릭", new Point(160, 280)); dictPoint.Add("모바일_상점_스와이프1", new Point(180, 395)); dictPoint.Add("모바일_상점_스와이프2", new Point(180, 70)); dictPoint.Add("모바일_상점_이용권구매_클릭", new Point(60, 315)); dictPoint.Add("모바일_상점_구매취소", new Point(100, 395)); dictPoint.Add("모바일_상점_구매수_클릭", new Point(230, 105)); dictPoint.Add("모바일_상점_구매수설정_클릭", new Point(160, 195)); dictPoint.Add("모바일_상점_구매수설정확인_클릭", new Point(215, 345)); dictPoint.Add("모바일_상점_구입_클릭", new Point(225, 395)); dictPoint.Add("모바일_상점_구입확인_클릭", new Point(225, 395)); }
private string GetOCR(Bitmap big, Imaging.ImageRange range, bool flag = true) { Point p = new Point(); int width = 0; int height = 0; p.X = range.loc.X; p.Y = range.loc.Y; width = range.width; height = range.height; big = Imaging.CropImage(big, p, width, height); big = Imaging.ConvertFormat(big, System.Drawing.Imaging.PixelFormat.Format32bppArgb); //if (!flag) //big = Imaging.MakeGrayscale3(big); ////; //else //big = grayscale(big); //big.Save(Environment.CurrentDirectory + "\\test.png"); ////tessnet2.Tesseract api = new tessnet2.Tesseract(); ////api.Init() //OcrApi.PathToEngine = Environment.CurrentDirectory + @"\tesseract.dll"; //OcrApi api = OcrApi.Create(); //Languages[] lang = { Languages.English }; //api.Init(lang, null, OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED); //api.SetVariable("tessedit_char_whitelist", "0123456789"); //string plainText = api.GetTextFromImage(big); //////Console.WriteLine(plainText); //////this.Invoke(new MethodInvoker(delegate() { txtLog.AppendText(plainText + Environment.NewLine); })); //api.Dispose(); //api = null; //System.GC.Collect(0, GCCollectionMode.Forced); //System.GC.WaitForPendingFinalizers(); //return plainText; var tmpFile = Path.GetTempFileName(); string text = ""; var bmp = new Bitmap(Math.Max(big.Width, 1024), Math.Max(big.Height, 768)); var gfxResize = Graphics.FromImage(bmp); gfxResize.DrawImage(big, new Rectangle(0, 0, big.Width, big.Height)); bmp.Save(tmpFile + ".png", ImageFormat.Png); //EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L); // 0(최저화질 고압축) ~ 100L(최고화질 저압축) //myEncoderParameters.Param[0] = myEncoderParameter; //bmp.Save(tmpFile + ".jpg", jpgEncoder, myEncoderParameters); var doc = new MODI.Document(); doc.Create(tmpFile + ".png"); //Regex reg = new Regex(@"[^\d]+"); try { doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); var img = (MODI.Image)doc.Images[0]; var layout = img.Layout; text = layout.Text; File.Delete(tmpFile); File.Delete(tmpFile + ".png"); } catch (Exception e) { try { doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); var img = (MODI.Image)doc.Images[0]; var layout = img.Layout; text = layout.Text; } catch (Exception) { } finally { File.Delete(tmpFile); File.Delete(tmpFile + ".png"); } } finally { File.Delete(tmpFile); File.Delete(tmpFile + ".png"); } Int32 tryCheck = 0; text = Regex.Replace(text.Replace(" ", "").Replace(",", "").Replace(".", "").Trim(), @"[^\d]", ""); Int32.TryParse(text, out tryCheck); if (tryCheck == 0 || tryCheck < 1000) { try { EncoderParameters myEncoderParameters = new EncoderParameters(1); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); tmpFile = Path.GetTempFileName(); text = ""; bmp = new Bitmap(Math.Max(big.Width, 1024), Math.Max(big.Height, 768)); gfxResize = Graphics.FromImage(bmp); gfxResize.DrawImage(big, new Rectangle(0, 0, big.Width, big.Height)); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L); // 0(최저화질 고압축) ~ 100L(최고화질 저압축) myEncoderParameters.Param[0] = myEncoderParameter; bmp.Save(tmpFile + ".jpg", jpgEncoder, myEncoderParameters); doc = new MODI.Document(); doc.Create(tmpFile + ".jpg"); doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); var img = (MODI.Image)doc.Images[0]; var layout = img.Layout; text = layout.Text; } catch (Exception) { doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); var img = (MODI.Image)doc.Images[0]; var layout = img.Layout; text = layout.Text; } finally { File.Delete(tmpFile); File.Delete(tmpFile + ".jpg"); } } text = Regex.Replace(text.Replace(" ", "").Replace(",", "").Replace(".", "").Trim(), @"[^\d]", ""); doc.Close(); doc = null; bmp.Dispose(); bmp = null; System.GC.Collect(0, GCCollectionMode.Forced); System.GC.WaitForPendingFinalizers(); return(text); //return ""; }