Esempio n. 1
0
        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();
            };
        }
Esempio n. 2
0
        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();
            };
        }