Files
ScanToTextProgram/ScanToTextProgram/MainForm.cs
USER002 ef822e51fc 수정
2024-11-25 18:31:37 +09:00

211 lines
7.4 KiB
C#

using DevExpress.Utils.Extensions;
using DevExpress.XtraPrinting.Native;
using DevExpress.XtraWaitForm;
using ScanToTextProgram.OCR;
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ScanToTextProgram
{
public partial class MainForm : Form
{
DataTable dataTable = null;
Rectangle rectangle = new Rectangle();
OcrProcessor ocrProcessor = new OcrProcessor();
public MainForm()
{
InitializeComponent();
dataTable = new DataTable();
dataTable.Columns.Add("시가");
dataTable.Columns.Add("고가");
dataTable.Columns.Add("저가");
dataTable.Columns.Add("종가");
dataTable.Columns.Add("구름(상)");
dataTable.Columns.Add("구름(하)");
dataTable.Columns.Add("40_1(상)");
dataTable.Columns.Add("40_1(하)");
dataTable.Columns.Add("40_2(상)");
dataTable.Columns.Add("40_2(하)");
treeList1.DataSource = dataTable;
}
// 스캔 영역 설정
private void simpleButton_SetScanPoin_Click(object sender, EventArgs e)
{
var screenCapture = new ScreenCapture();
rectangle = screenCapture.SelectArea();
}
// 스캔 버튼 클릭
private void simpleButton_SetScanPoin_Click_1(object sender, EventArgs e)
{
scanToOcr();
}
// 설정된 영역에 따라 스캔하고 OCR 변경하기
public void scanToOcr()
{
var screenCapture = new ScreenCapture();
var selectedArea = rectangle;
var screenshot = screenCapture.CaptureScreen(selectedArea);
string extractedText = ocrProcessor.ExtractTextFromImage(screenshot);
var splitLine = extractedText.Split('\n').ToList();
var 시가 = 0.0;
var 고가 = 0.0;
var 저가 = 0.0;
var 종가 = 0.0;
var 구름_상 = 0.0;
var 구름_하 = 0.0;
var _40_1_상 = 0.0;
var _40_1_하 = 0.0;
var _40_2_상 = 0.0;
var _40_2_하 = 0.0;
for (var i = 0; i < splitLine.Count(); i++)
{
var str1 = splitLine[i].Trim();
if (string.IsNullOrEmpty(str1)) splitLine.Remove(splitLine[i]);
}
for (var i = 0; i < splitLine.Count(); i++)
{
if (string.IsNullOrEmpty(splitLine[i])) continue;
var line = splitLine[i];
// 시가, 고가, 저가, 종가
if (i == 0)
{
var 시고저종s = line.Split(' ');
var cnt = 시고저종s.Count() - 1;
var str_시가 = 시고저종s[cnt - 5].Remove(0, 1);
var str_고가 = 시고저종s[cnt - 4];
var str_저가 = 시고저종s[cnt - 3].Remove(0, 1);
var str_종가 = 시고저종s[cnt - 2];
if (!str_시가.Contains('.')) str_시가 = str_시가.Insert(str_시가.Length - 1, ".");
if (!str_고가.Contains('.')) str_고가 = str_고가.Insert(str_고가.Length - 1, ".");
if (!str_저가.Contains('.')) str_저가 = str_저가.Insert(str_저가.Length - 1, ".");
if (!str_종가.Contains('.')) str_종가 = str_종가.Insert(str_종가.Length - 1, ".");
시가 = Convert.ToDouble(str_시가);
고가 = Convert.ToDouble(str_고가);
저가 = Convert.ToDouble(str_저가);
종가 = Convert.ToDouble(str_종가);
}
// 구름떼
else if (i == 1)
{
var 구름떼s = line.Split(' ');
var str_data1 = 구름떼s[구름떼s.Count() - 1];
var str_data2 = 구름떼s[구름떼s.Count() - 2];
if (!str_data1.Contains('.')) str_data1 = str_data1.Insert(str_data1.Length - 1, ".");
if (!str_data2.Contains('.')) str_data2 = str_data2.Insert(str_data2.Length - 1, ".");
var data1 = Convert.ToDouble(str_data1);
var data2 = Convert.ToDouble(str_data2);
if (data1 > data2)
{
구름_상 = data1;
구름_하 = data2;
}
else
{
구름_상 = data2;
구름_하 = data1;
}
}
else if (i == 2)
{
var 볼린저_40_2s = line.Split(' ');
var str_40_2_상 = 볼린저_40_2s[볼린저_40_2s.Count() - 2];
var str_40_2_하 = 볼린저_40_2s[볼린저_40_2s.Count() - 1];
if (!str_40_2_상.Contains('.')) str_40_2_상 =str_40_2_상.Insert(str_40_2_상.Length - 1, ".");
if (!str_40_2_하.Contains('.')) str_40_2_하 = str_40_2_하.Insert(str_40_2_하.Length - 1, ".");
_40_2_상 = Convert.ToDouble(str_40_2_상);
_40_2_하 = Convert.ToDouble(str_40_2_하);
}
else if (i == 3)
{
var 볼린저_40_1s = line.Split(' ');
var str_40_1_상 = 볼린저_40_1s[볼린저_40_1s.Count() - 2];
var str_40_1_하 = 볼린저_40_1s[볼린저_40_1s.Count() - 1];
if (!str_40_1_상.Contains('.')) str_40_1_상 = str_40_1_상.Insert(str_40_1_상.Length - 1, ".");
if (!str_40_1_하.Contains('.')) str_40_1_하 = str_40_1_하.Insert(str_40_1_하.Length - 1, ".");
_40_1_상 = Convert.ToDouble(str_40_1_상);
_40_1_하 = Convert.ToDouble(str_40_1_하);
}
else if (i == 4)
{
}
else if (i == 5)
{
}
else if (i == 6)
{
}
}
dataTable.Rows.Clear();
var row = dataTable.Rows.Add();
row["시가"] = Convert.ToDouble(시가);
row["고가"] = Convert.ToDouble(고가);
row["저가"] = Convert.ToDouble(저가);
row["종가"] = Convert.ToDouble(종가);
row["구름(상)"] = Convert.ToDouble(구름_상);
row["구름(하)"] = Convert.ToDouble(구름_하);
row["40_1(상)"] = Convert.ToDouble(_40_1_상);
row["40_1(하)"] = Convert.ToDouble(_40_1_하);
row["40_2(상)"] = Convert.ToDouble(_40_2_상);
row["40_2(하)"] = Convert.ToDouble(_40_2_하);
treeList1.DataSource = dataTable;
treeList1.RefreshDataSource();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
HookHandler.Unhook();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void simpleButton_KeyHookStart_Click(object sender, EventArgs e)
{
HookHandler.SetHook(this);
}
}
}