public MainWindow() { InitializeComponent(); // 注册窗口移动事件 TitleBar.MouseMove += (sender, e) => { if (e.LeftButton == MouseButtonState.Pressed) { this.DragMove(); } }; // 注册窗口最小化按钮 MinSize.Click += delegate { this.WindowState = WindowState.Minimized; }; // 注册窗口关闭按钮 AppExit.Click += delegate { this.Close(); }; // 载入图片 LoadImg.Click += delegate { OpenFileDialog FileLoader = new OpenFileDialog() { Filter = "位图文件|*.bmp;*.png;*.jpg" }; if (FileLoader.ShowDialog().Value) { ShowCapture.Source = new BitmapImage(); ImageBox.Source = new BitmapImage(new Uri(FileLoader.FileName)); } }; //Capture.PreviewMouseLeftButtonDown += delegate //{ // //if (Capture.AllowDrop) // //{ // // Capture.AllowDrop = false; // // Capture.Content = "屏幕捕获"; // // ShowCapture.Source = new BitmapImage(); // //} // //else // //{ // // Capture.AllowDrop = true; // // Capture.Content = "停止捕获"; // // ShowCapture.Source = ScreenCapture.ScreenSnapshot(); // //} // ShowCapture.Source = ScreenCapture.ScreenSnapshot(); //}; // 屏幕捕获 Capture.PreviewMouseMove += (sender, e) => { if (e.LeftButton == MouseButtonState.Pressed) { if (Capture.AllowDrop == false) { Capture.AllowDrop = true; ShowCapture.Source = ScreenCapture.ScreenSnapshot(); } Point mousePoint = PointToScreen(e.GetPosition(this)); ShowCapture.SetValue(Canvas.LeftProperty, 120 - mousePoint.X); ShowCapture.SetValue(Canvas.TopProperty, 120 - mousePoint.Y); } else { Capture.AllowDrop = false; } }; // 刷新图像 Refresh.Click += delegate { List <byte> ColorList = new List <byte>(); RenderTargetBitmap bmp = new RenderTargetBitmap(240, 240, 96, 96, PixelFormats.Pbgra32); bmp.Render(Preview); using (var outStream = new MemoryStream()) { BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); encoder.Save(outStream); using (Bitmap img = new Bitmap(outStream)) { for (int h = 0; h < 240; ++h) { for (int v = 0; v < 240; ++v) { Color color = img.GetPixel(v, h); var rgb565 = color.R / 8 * 2048 + color.G / 4 * 32 + color.B / 8; ColorList.Add((byte)(rgb565 >> 8)); ColorList.Add((byte)(rgb565 & 0xFF)); } } } } byte spicmd = (byte)(sspi.IsChecked.Value ? 0xFB : 0xFA); List <byte[]> ImageArr = new List <byte[]>(); for (int i = 0; i < ColorList.Count; i += 60) { List <byte> tmp = new List <byte> { spicmd, 0x3C, (byte)((i % 480) / 2), (byte)(i / 480) }; tmp.AddRange(ColorList.Skip(i).Take(60)); ImageArr.Add(tmp.ToArray()); } ImageArr.ForEach(b => SendBufferQueue.Enqueue(b)); if (SendBufferQueue.Count > 0) { Transceiver(new byte[] { 0xB0 }); // 启动数据收发器 } }; // 更新固件 LoadHex.Click += delegate { OpenFileDialog FileLoader = new OpenFileDialog() { Filter = "固件文件|*.hex" }; if (FileLoader.ShowDialog() == false) { return; } Firmware = HexToBin(FileLoader.FileName); // 输出转译后的固件数据,调试使用 //Firmware.ForEach(b => //{ // Debug.WriteLine(string.Join(" ", b.Select(i => $"{i:X2}"))); //}); SendBufferQueue = new ConcurrentQueue <byte[]>(); SendBufferQueue.Enqueue(new byte[] { 0xB1, 0x00 }); // 进入Bootloader模式命令 Transceiver(new byte[] { 0xB0 }); // 启动数据收发器 }; this.Loaded += delegate { GetHidDeviceList(); }; }
public MainWindow() { InitializeComponent(); // 注册窗口移动事件 TitleBar.MouseMove += (sender, e) => { if (e.LeftButton == MouseButtonState.Pressed) { this.DragMove(); } }; // 注册窗口最小化按钮 MinSize.Click += delegate { this.WindowState = WindowState.Minimized; }; // 注册窗口关闭按钮 AppExit.Click += delegate { this.Close(); }; // 载入图片 LoadImg.Click += delegate { OpenFileDialog FileLoader = new OpenFileDialog() { Filter = "位图文件|*.bmp;*.png;*.jpg" }; if (FileLoader.ShowDialog().Value) { ShowCapture.Source = new BitmapImage(); ImageBox.Source = new BitmapImage(new Uri(FileLoader.FileName)); // 输出图片数据到下位机 if (serialport.IsOpen) { return; } AutoCapture.IsChecked = false; Rectangle rectangle = new Rectangle() { X = (int)Preview.PointToScreen(new Point(0, 0)).X, Y = (int)Preview.PointToScreen(new Point(0, 0)).Y, Width = (int)Preview.Width, Height = (int)Preview.Height }; SetDeviceData(rectangle); } }; // 屏幕捕获 Capture.PreviewMouseLeftButtonDown += delegate { Capture.CaptureMouse(); ScreenCapture.ScreenSnapshot(out BitmapSource bitmapSource); ShowCapture.Source = bitmapSource; }; // 移动捕获坐标 Capture.PreviewMouseMove += (sender, e) => { if (e.LeftButton == MouseButtonState.Pressed) { Point mousePoint = PointToScreen(e.GetPosition(this)); ShowCapture.SetValue(Canvas.LeftProperty, 120 - mousePoint.X); ShowCapture.SetValue(Canvas.TopProperty, 120 - mousePoint.Y); } }; // 向下位机发送捕获结果 Capture.PreviewMouseLeftButtonUp += delegate { if (Capture.IsMouseCaptured && (serialport.IsOpen == false)) { Capture.ReleaseMouseCapture(); Rectangle rect = new Rectangle() { X = (int)Preview.PointToScreen(new Point(0, 0)).X, Y = (int)Preview.PointToScreen(new Point(0, 0)).Y, Width = (int)Preview.Width, Height = (int)Preview.Height }; if (AutoCapture.IsChecked.Value) { rect.X = 0 - Convert.ToInt32(ShowCapture.GetValue(Canvas.LeftProperty)); rect.Y = 0 - Convert.ToInt32(ShowCapture.GetValue(Canvas.TopProperty)); } SetDeviceData(rect); } }; // 自动捕获 AutoCapture.Checked += delegate { IsAutoCapture = AutoCapture.IsChecked.Value; }; AutoCapture.Unchecked += delegate { IsAutoCapture = AutoCapture.IsChecked.Value; }; // 刷新图像 //Refresh.Click += delegate //{ // if (serialport.IsOpen) return; // Rectangle rectangle = new Rectangle() // { // X = 0 - Convert.ToInt32(ShowCapture.GetValue(Canvas.LeftProperty)), // Y = 0 - Convert.ToInt32(ShowCapture.GetValue(Canvas.TopProperty)), // Width = (int)Preview.Width, // Height = (int)Preview.Height // }; // SetDeviceData(rectangle); //}; // 更新固件 LoadHex.Click += delegate { if (serialport.IsOpen) { MessageBox.Show("请等待当前传输完成后再试!"); return; } OpenFileDialog FileLoader = new OpenFileDialog() { Filter = "固件文件|*.hex" }; if (FileLoader.ShowDialog() == false) { return; } Firmware = new ConcurrentQueue <byte[]>(); HexToBin(FileLoader.FileName).ForEach(b => Firmware.Enqueue(b)); // 输出转译后的固件数据,调试使用 //Firmware.ForEach(b => //{ // Debug.WriteLine(string.Join(" ", b.Select(i => $"{i:X2}"))); //}); try { serialport.PortName = DeviceComboBox.Text; serialport.Open(); serialport.Write(new byte[] { 0xB1 }, 0, 1); // 进入Bootloader模式命令 SysPanel.IsEnabled = false; serialport.Close(); } catch (Exception e) { Debug.Print(e.Message); } }; this.Loaded += delegate { GetDeviceList(); }; }