using ComeCapture.Controls;
using ComeCapture.Helpers;
using ComeCapture.Models;
using Common.system;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using XHWK.WKTool;
using static XHWK.WKTool.XHMicroLessonSystemWindow;
namespace ComeCapture
{
///
/// 截图 MainWindow.xaml 的交互逻辑
///
public partial class JieTuWindow : Window
{
public static double ScreenWidth = SystemParameters.PrimaryScreenWidth;
public static double ScreenHeight = SystemParameters.PrimaryScreenHeight;
public static double ScreenScale = 1;
public static int MinSize = 10;
internal double pwidth = SystemParameters.PrimaryScreenWidth;
internal double pHeight = SystemParameters.PrimaryScreenHeight;
//画图注册名称集合
public List list = new List();
//画图注册名称
public int num = 1;
//是否截图开始
private bool _IsMouseDown = false;
//是否截图完毕
private bool _IsCapture = false;
private double _X0 = 0;
private double _Y0 = 0;
///
/// 键盘钩子
///
private KeyboardHookCommon k_hook;
//private IntPtr BitmapPtr = IntPtr.Zero;
//private IntPtr JieTuBitmapPtr = IntPtr.Zero;
///
/// 截图
///
public JieTuWindow()
{
_Current = this;
InitializeComponent();
k_hook = new KeyboardHookCommon();
k_hook.KeyDownEvent += K_hook_KeyDownEvent;
DataContext = new AppModel();
initialization();
Screenshot();
MaxWindow();
MaskLeft.Height = ScreenHeight;
MaskRight.Height = ScreenHeight;
//计算Windows项目缩放比例
ScreenHelper.ResetScreenScale();
//RemoveControl();
//AllowsTransparency = "True"
}
public void Screenshot()
{
//IntPtr BitmapPtr = IntPtr.Zero;
//Background = new ImageBrush(ImageHelper.GetFullBitmapSource(out BitmapPtr));
string time = GetTimeStamp();
string tempPath = AppDomain.CurrentDomain.BaseDirectory + "temp\\";
if (!Directory.Exists(tempPath))
{
Directory.CreateDirectory(tempPath);
}
string imagePath = Path.Combine(tempPath, time + ".jpg");
if (ImageHelper.GetScreenshot(new Rectangle(0, 0, 0, 0), null, true, out BitmapImage bitmap))
{
Background = new ImageBrush(bitmap);
}
}
public void initialization()
{
Background = null;
_IsMouseDown = false;
_IsCapture = false;
ImageEditBar.Current.Visibility = Visibility.Collapsed;
SizeColorBar.Current.Visibility = Visibility.Collapsed;
SizeRGB.Visibility = Visibility.Collapsed;
MainImage.Visibility = Visibility.Collapsed;
DataContext = new AppModel();
WpfHelper.MainDispatcher = Dispatcher;
}
///
/// 初始化快捷键
///
public void InitializeKeyDownEvent()
{
k_hook.Start();//安装键盘钩子
}
///
/// 快捷键
///
///
///
private void K_hook_KeyDownEvent(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyValue == (int)System.Windows.Forms.Keys.Escape)
{
k_hook.Stop();
Current.OnCancel();
APP.W_XHMicroLessonSystemWindow.InitializeKeyDownEvent();
APP.W_XHMicroLessonSystemWindow.WindowType();
Hide();
}
}
#region 属性 Current
private static JieTuWindow _Current = null;
public static JieTuWindow Current => _Current;
#endregion 属性 Current
#region 全屏+置顶
private void MaxWindow()
{
Left = 0;
Top = 0;
Width = ScreenWidth;
Height = ScreenHeight;
Activate();
}
#endregion 全屏+置顶
#region 注册画图
public static void Register(object control)
{
string name = "Draw" + _Current.num;
_Current.MainCanvas.RegisterName(name, control);
_Current.list.Add(new NameAndLimit(name));
_Current.num++;
}
#endregion 注册画图
#region 截图区域添加画图
public static void AddControl(UIElement e)
{
_Current.MainCanvas.Children.Add(e);
}
#endregion 截图区域添加画图
#region 截图区域撤回画图
public static void RemoveControl(UIElement e)
{
_Current.MainCanvas.Children.Remove(e);
}
#endregion 截图区域撤回画图
#region 撤销
public void OnRevoke()
{
if (list.Count > 0)
{
string name = list[list.Count - 1].Name;
object obj = MainCanvas.FindName(name);
if (obj != null)
{
MainCanvas.Children.Remove(obj as UIElement);
MainCanvas.UnregisterName(name);
list.RemoveAt(list.Count - 1);
MainImage.Limit = list.Count == 0 ? new Limit() : list[list.Count - 1].Limit;
}
}
}
#endregion 撤销
#region 保存
public void OnSave()
{
//var sfd = new Microsoft.Win32.SaveFileDialog
//{
// FileName = "截图" + DateTime.Now.ToString("yyyyMMddhhmmss"),
// Filter = "png|*.png",
// AddExtension = true,
// RestoreDirectory = true
//};
//if (sfd.ShowDialog() == true)
//{
// Hidden();
// Thread t = new Thread(new ThreadStart(() =>
// {
// Thread.Sleep(200);
// WpfHelper.SafeRun(() =>
// {
// var source = GetCapture();
// if (source != null)
// {
// ImageHelper.SaveToPng(source, sfd.FileName);
// Shared.TeachingData.FilePath = sfd.FileName;
// //Thread.Sleep(200);
// }
// Close();
// if (ChangeTextEvent != null)
// {
// ChangeTextEvent("关闭窗口");
// }
// //Go(sfd.FileName);
// });
// }))
// {
// IsBackground = true
// };
// t.Start();
//}
}
#endregion 保存
//定义事件
public event ChangeTextHandler ChangeTextEvent;
#region 获取截图
private void GetCapture()
{
string time = GetTimeStamp();
string tempPath = AppDomain.CurrentDomain.BaseDirectory + "Temp\\";
if (!Directory.Exists(tempPath))
{
Directory.CreateDirectory(tempPath);
}
APP.ImgPath = string.Empty;
string imagePath = Path.Combine(tempPath, time + ".jpg");
APP.ImgPath = imagePath;
//LogHelper.WriteInfoLog(imagePath);
//this.Close();
//string imagePath = ImageHelper.GetImagePath(out string serverSavePath);
//BitmapSource bitmap = ImageHelper.GetBitmapSource((int)AppModel.Current.MaskLeftWidth + 1, (int)AppModel.Current.MaskTopHeight + 1, (int)MainImage.ActualWidth - 2, (int)MainImage.ActualHeight - 2, out JieTuBitmapPtr);
/* BitmapImage bitmap = */
ImageHelper.GetScreenshot(new Rectangle((int)AppModel.Current.MaskLeftWidth + 1, (int)AppModel.Current.MaskTopHeight + 1, (int)MainImage.ActualWidth - 2, (int)MainImage.ActualHeight - 2), imagePath, true, out BitmapImage bitmapimg);
_IsMouseDown = false;
_IsCapture = false;
ImageEditBar.Current.Visibility = Visibility.Collapsed;
SizeColorBar.Current.Visibility = Visibility.Collapsed;
SizeRGB.Visibility = Visibility.Collapsed;
MainImage.Visibility = Visibility.Collapsed;
DataContext = new AppModel();
//ImageHelper.GetScreenshot(new Rectangle(0, 0, 0, 0), imagePath, true, out BitmapImage bitmap);//zxy
//Background = new ImageBrush(bitmap);
WpfHelper.MainDispatcher = Dispatcher;
MaxWindow();
MaskLeft.Height = ScreenHeight;
MaskRight.Height = ScreenHeight;
//计算Windows项目缩放比例
ScreenHelper.ResetScreenScale();
//if (bitmap != null)
//{
// //Shared.TeachingData.REQ_InteractiveLaunch.teacherpic = serverSavePath;
// //Shared.TeachingData.FilePath = imagePath;
//}
///修改为统一截图时存储到服务器 修改人:赵耀 修改时间:2020年8月11日
//if (bitmap != null)
//{
// TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
// string httpurl = Convert.ToInt64(ts.TotalMilliseconds).ToString() + ".png";
// string path = ZConfig.classRoomImagePath() + httpurl.Substring(httpurl.LastIndexOf('/') + 1);
// Shared.TeachingData.REQ_InteractiveLaunch.teacherpic = ZConfig.dbImagePath() + httpurl;
// Shared.TeachingData.FilePath = path;
// FileInfo fi = new FileInfo(path); var di = fi.Directory; if (!di.Exists) {
// di.Create();
//}
// using (var fs = System.IO.File.Create(path))
// {
// BitmapEncoder encoder = new PngBitmapEncoder();
// encoder.Frames.Add(BitmapFrame.Create(bitmap));
// encoder.Save(fs);
// bitmap = null;
// encoder = null;
// }
//}
//Dispose();
//GC.Collect();
//ImageHelper.DeleteObject(BitmapPtr);
//ImageHelper.DeleteObject(JieTuBitmapPtr);
initialization();
Owner = null;
WindowState = WindowState.Minimized;
Visibility = Visibility.Hidden;
ShowInTaskbar = false;
//this.Hide();
if (ChangeTextEvent != null)
{
k_hook.Stop();
ChangeTextEvent("关闭窗口");
}
}
#endregion 获取截图
///
/// 获取时间戳
///
///
public string GetTimeStamp()
{
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalMilliseconds).ToString();
}
#region 退出截图
public void OnCancel()
{
//Close();
//ImageHelper.DeleteObject(BitmapPtr);
//ImageHelper.DeleteObject(JieTuBitmapPtr);
initialization();
Owner = null;
WindowState = WindowState.Minimized;
Visibility = Visibility.Hidden;
ShowInTaskbar = false;
//this.Hide();
//_Bitmap.Dispose();
if (ChangeTextEvent != null)
{
k_hook.Stop();
ChangeTextEvent("取消");
}
}
#endregion 退出截图
#region 完成截图
public void OnOK()
{
Hidden();
Thread t = new Thread(new ThreadStart(() =>
{
Thread.Sleep(50);
//Thread.Sleep(200);
WpfHelper.SafeRun(() =>
{
/*var source = */
GetCapture();
//Shared.TeachingData.Source = source;
//if (source != null)
//{
// TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
// string httpurl = Convert.ToInt64(ts.TotalMilliseconds).ToString() + ".png";
// string path = ZConfig.classRoomImagePath() + httpurl.Substring(httpurl.LastIndexOf('/') + 1);
// Shared.TeachingData.REQ_InteractiveLaunch.teacherpic = ZConfig.dbImagePath() + httpurl;
// ImageHelper.SaveToPng(source, path);
// Shared.TeachingData.FilePath = path;
// //Clipboard.SetImage(source);
//}
//Close();
//if (ChangeTextEvent != null)
//{
// ChangeTextEvent("关闭窗口");
//}
});
}))
{
IsBackground = true
};
t.Start();
}
#endregion 完成截图
#region 截图前隐藏窗口
private void Hidden()
{
//隐藏尺寸RGB框
if (AppModel.Current.MaskTopHeight < 40)
{
SizeRGB.Visibility = Visibility.Collapsed;
}
int need = SizeColorBar.Current.Selected == Tool.Null ? 30 : 67;
if (AppModel.Current.MaskBottomHeight < need && AppModel.Current.MaskTopHeight < need)
{
ImageEditBar.Current.Visibility = Visibility.Collapsed;
SizeColorBar.Current.Visibility = Visibility.Collapsed;
}
MainImage.ZoomThumbVisibility = Visibility.Collapsed;
}
#endregion 截图前隐藏窗口
#region 鼠标及键盘事件
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (_IsCapture)
{
return;
}
System.Windows.Point point = e.GetPosition(this);
_X0 = point.X;
_Y0 = point.Y;
_IsMouseDown = true;
Canvas.SetLeft(MainImage, _X0);
Canvas.SetTop(MainImage, _Y0);
AppModel.Current.MaskLeftWidth = _X0;
AppModel.Current.MaskRightWidth = ScreenWidth - _X0;
AppModel.Current.MaskTopHeight = _Y0;
Show_Size.Visibility = Visibility.Visible;
}
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (!_IsMouseDown || _IsCapture)
{
return;
}
_IsMouseDown = false;
if (MainImage.Width >= MinSize && MainImage.Height >= MinSize)
{
_IsCapture = true;
ImageEditBar.Current.Visibility = Visibility.Visible;
ImageEditBar.Current.ResetCanvas();
Cursor = Cursors.Arrow;
}
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
System.Windows.Point point = e.GetPosition(this);
System.Windows.Point screenP = PointToScreen(point);
try
{
AppModel.Current.ShowRGB = ImageHelper.GetRGB((int)screenP.X, (int)screenP.Y);
}
catch (Exception ex)
{
MessageWindow.Show(ex.Message);
}
if (_IsCapture)
{
return;
}
if (Show_RGB.Visibility == Visibility.Collapsed)
{
Show_RGB.Visibility = Visibility.Visible;
}
if (_IsMouseDown)
{
double w = point.X - _X0;
double h = point.Y - _Y0;
if (w < MinSize || h < MinSize)
{
return;
}
if (MainImage.Visibility == Visibility.Collapsed)
{
MainImage.Visibility = Visibility.Visible;
}
AppModel.Current.MaskRightWidth = ScreenWidth - point.X;
AppModel.Current.MaskTopWidth = w;
AppModel.Current.MaskBottomHeight = ScreenHeight - point.Y;
AppModel.Current.ChangeShowSize();
MainImage.Width = w;
MainImage.Height = h;
}
else
{
AppModel.Current.ShowSizeLeft = point.X;
AppModel.Current.ShowSizeTop = ScreenHeight - point.Y < 30 ? point.Y - 30 : point.Y + 10;
}
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
initialization();
Owner = null;
WindowState = WindowState.Minimized;
Visibility = Visibility.Hidden;
ShowInTaskbar = false;
}
}
#endregion 鼠标及键盘事件
///
/// 关闭时清除tool页记录的截图数据
///
///
///
private void Window_Closed(object sender, EventArgs e)
{
click_closeJietuWindowClick();
}
///
/// 非正常关闭时jietuWindow=null;
///
///
///
public delegate void CloseJietuWindowClick();
///
/// 非正常关闭时jietuWindow=null;
///
public event CloseJietuWindowClick click_closeJietuWindowClick;
}
}