diff --git a/CaptureWindow.xaml b/CaptureWindow.xaml
new file mode 100644
index 0000000..31ab39d
--- /dev/null
+++ b/CaptureWindow.xaml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CaptureWindow.xaml.cs b/CaptureWindow.xaml.cs
new file mode 100644
index 0000000..f21657d
--- /dev/null
+++ b/CaptureWindow.xaml.cs
@@ -0,0 +1,225 @@
+using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Windows;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+
+
+namespace ScreenShotOCR
+{
+ ///
+ /// CaptureWindow.xaml에 대한 상호 작용 논리
+ ///
+ public partial class CaptureWindow : Window
+ {
+ public EventHandlerGrab m_handlerGrab = null;
+
+ Bitmap bitmap = null;
+ Bitmap crop = null;
+ Image bg = null;
+
+ int screen_w = (int)SystemParameters.PrimaryScreenWidth;
+ int screen_h = (int)SystemParameters.PrimaryScreenHeight;
+ System.Drawing.Rectangle roi = new System.Drawing.Rectangle();
+ float resX = 1.0f;
+ float resY = 1.0f;
+ bool bClicked = false;
+ System.Drawing.PointF pt = new System.Drawing.PointF();
+
+
+ public CaptureWindow()
+ {
+ InitializeComponent();
+ SetTransparent(true);
+
+ m_handlerGrab = delegate ()
+ {
+ var crop = bitmap.Clone(roi, bitmap.PixelFormat);
+ return crop;
+ };
+ }
+
+ public void SetTransparent(bool enable)
+ {
+ if (enable)
+ {
+ this.Background = System.Windows.Media.Brushes.Transparent;
+ ScreenView.Source = null;
+ }
+ else
+ {
+ this.Background = System.Windows.Media.Brushes.White;
+ }
+ }
+
+ private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ this.DragMove();
+ }
+
+ public void copyBtn_Click(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ //new Task(delegate
+ //{
+ SetTransparent(false);
+ if (bitmap != null) bitmap.Dispose();
+ if (bg != null) { bg.Dispose(); }
+ bitmap = new Bitmap(screen_w, screen_h, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+ var gr = Graphics.FromImage(bitmap);
+ gr.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
+ string name = "snapshot.png";
+ bg = ResizeImage(bitmap, new System.Drawing.Size(screen_w, screen_h));
+ ScreenView.Source = ConvertToImageSource(bg);
+ bitmap.Save(name, ImageFormat.Png);
+ gr.Dispose();
+ //}, TaskCreationOptions.DenyChildAttach).Start();
+ }
+ catch (Exception ex)
+ {
+
+ }
+ }
+
+ public static Bitmap ResizeImage(Bitmap imgToResize, System.Drawing.Size size)
+ {
+ try
+ {
+ Bitmap b = new Bitmap(size.Width, size.Height);
+ using (Graphics g = Graphics.FromImage((Image)b))
+ {
+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+ g.DrawImage(imgToResize, 0, 0, size.Width, size.Height);
+ }
+ return b;
+ }
+ catch
+ {
+ Console.WriteLine("Bitmap could not be resized");
+ return imgToResize;
+ }
+ }
+
+ private ImageSource ConvertToImageSource(Image image)
+ {
+ using (var ms = new MemoryStream())
+ {
+ image.Save(ms, ImageFormat.Bmp);
+ ms.Seek(0, SeekOrigin.Begin);
+
+ var bitmapImage = new BitmapImage();
+ bitmapImage.BeginInit();
+ bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
+ bitmapImage.StreamSource = ms;
+ bitmapImage.EndInit();
+
+ return bitmapImage;
+ }
+ }
+
+ private void ClearBtn_Click(object sender, RoutedEventArgs e)
+ {
+ SetTransparent(true);
+ }
+
+ private void Close_Click(object sender, RoutedEventArgs e)
+ {
+ this.Visibility = Visibility.Hidden;
+ }
+
+ private void ScreenView_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+ if (!bClicked)
+ {
+ bClicked = true;
+ var p = e.GetPosition(ScreenView);
+ float x = Convert.ToSingle(Math.Round(p.X * resX));
+ float y = Convert.ToSingle(Math.Round(p.Y * resY));
+ pt = new System.Drawing.PointF(x, y);
+ roi.X = Convert.ToInt32(x);
+ roi.Y = Convert.ToInt32(y);
+ }
+ }
+
+ private void ScreenView_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (bClicked)
+ {
+ var p = e.GetPosition(ScreenView);
+ float x = Convert.ToSingle(p.X);
+ float y = Convert.ToSingle(p.Y);
+ var w = (float)Math.Round(x * resX - pt.X);
+ var h = (float)Math.Round(y * resY - pt.Y);
+ roi.Width = Convert.ToInt32(w);
+ roi.Height = Convert.ToInt32(h);
+ CheckROI();
+ DrawROI();
+ }
+ }
+
+ private void ScreenView_MouseUp(object sender, MouseButtonEventArgs e)
+ {
+ if (bClicked)
+ {
+ var p = e.GetPosition(ScreenView);
+ float x = Convert.ToSingle(p.X);
+ float y = Convert.ToSingle(p.Y);
+ var w = (float)Math.Round(x * resX - pt.X);
+ var h = (float)Math.Round(y * resY - pt.Y);
+ roi.Width = Convert.ToInt32(w);
+ roi.Height = Convert.ToInt32(h);
+ CheckROI();
+ DrawROI();
+ bClicked = false;
+ }
+ }
+
+ private void CheckROI()
+ {
+ int x = roi.X;
+ if (x < 0) { x = 0; } else if (x >= screen_w) { x = screen_w - 1; }
+ int y = roi.Y;
+ if (y < 0) { y = 0; } else if (y >= screen_h) { y = screen_h - 1; }
+ int w = roi.Width;
+ if (w < 0) { w = 0; } else if (x + w >= screen_w) { w = screen_w - 1 - x; }
+ int h = roi.Height;
+ if (h < 0) { h = 0; } else if (y + h >= screen_h) { h = screen_h - 1 - y; }
+ roi = new System.Drawing.Rectangle(x, y, w, h);
+ }
+
+ private void DrawROI()
+ {
+ if (bg == null) return;
+ try
+ {
+ int x = (int)Math.Round(Convert.ToSingle(roi.X / resX));
+ int y = (int)Math.Round(Convert.ToSingle(roi.Y / resY));
+ int w = (int)Math.Round(Convert.ToSingle(roi.Width / resX));
+ int h = (int)Math.Round(Convert.ToSingle(roi.Height / resY));
+
+ System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Red, 1);
+ System.Drawing.Rectangle rect = new System.Drawing.Rectangle(x, y, w, h);
+ var tmp = (Bitmap)bg.Clone();
+ var gr = Graphics.FromImage(tmp);
+ gr.DrawRectangle(pen, rect);
+ ScreenView.Source = ConvertToImageSource(tmp);
+
+ //posX.Text = roi.X.ToString();
+ //posY.Text = roi.Y.ToString();
+ //posW.Text = roi.Width.ToString();
+ //posH.Text = roi.Height.ToString();
+
+ gr.Dispose();
+ tmp.Dispose();
+ }
+ catch
+ {
+ }
+ }
+
+ }
+}
diff --git a/MainWindow.xaml b/MainWindow.xaml
index 87dd8bd..604a2a7 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -13,7 +13,7 @@
-