private void Communication_PackageReceived(FingerPrint.Frame frame) { Viewer.UpdateImageCallback UpdateImage = ChangeImage; Viewer.UpdateStatusCallback UpdateStatusText = ShowStatusText; Viewer.UpdateStatusCallback UpdateTNText = ShowStatusText; Viewer.UpadateLogInvoke UpdateLog = LogUpdate; #region Debug_input #if DEBUGX if (Viewer.frameCount > 0 && Viewer.frameCount % 20 == 0) { Viewer._Buffer3 = true; int col = frame.nDataFrameNum * 16; Bitmap clo = frame.bitmap.Clone(new Rectangle(col, 0, 4, frame.bitmap.Height), PixelFormat.Format24bppRgb); BitmapData bmpData = clo.LockBits(new Rectangle(0, 0, 4, clo.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); //frame.bitmap.Height byte[] data = new byte[bmpData.Width * bmpData.Height * 3]; System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, data, 0, data.Length); //複製記憶體區塊 clo.UnlockBits(bmpData); if (data[0] != 0) { Viewer.tArrange = new Thread(CheckBmp); Viewer.tArrange.Start(data); //new Rectangle(0, 0, 1600, 1), frame.bitmap.PixelFormat } } #endif #endregion Debug_input if (!Viewer.StreamStart) { Viewer.StreamStart = true; Invoke(UpdateLog, new Object[] { "Frist Stream In, Start Stram...", true }); } Viewer.nDataFrameNum = (uint)frame.nDataFrameNum; Viewer.FPS = frame.nFPS; Viewer.bmp_TN_Temp = frame.bitmap; switch (frame.nDataFrameNum) { case 0: Viewer._Buffer0 = false; Viewer.bmp0 = frame.bitmap; Viewer._Buffer0 = true; break; case 1: Viewer._Buffer1 = false; Viewer.bmp1 = frame.bitmap; Viewer._Buffer1 = true; break; case 2: Viewer._Buffer2 = false; Viewer.bmp2 = frame.bitmap; Viewer._Buffer2 = true; break; default: break; } if (Viewer.DisplayByGL) { Invoke(UpdateImage); } Invoke(UpdateStatusText, new Object[] { this.SSL_Framecount, "Frame count : " + Viewer.frameCount, null }); Invoke(UpdateStatusText, new Object[] { this.SSL_TN, "TN : " + Viewer.TN, null }); Viewer.frameCount++; if (Viewer.save_count > 0) { Viewer.tSaveImage = new Thread(new ParameterizedThreadStart(Save_Image)); Viewer.tSaveImage.Start(frame.bitmap); Viewer.save_count--; } GC.Collect(); }
private void btn_connect_Click(object sender, EventArgs e) { Viewer.UpdateStatusCallback UpdateStatusText = ShowStatusText; Viewer.fingerPrint = new FingerPrint(); Viewer.fingerPrint.AutoConnect_Interval = 5000; btn_connect.Enabled = false; if (Viewer.fingerPrint.IsConnected) { Viewer._Initial = true; Invoke(UpdateStatusText, new Object[] { SSL_Connect_Status, " Connectted", Color.Green }); Viewer.fingerPrint.FrameReceived += Communication_PackageReceived; Viewer.fingerPrint.LogReceived += Communication_LogReceived; GeneralProtocol.BasicCommand.DeviceDescription devDes = new GeneralProtocol.BasicCommand.DeviceDescription(); ErrorCode ret = Viewer.fingerPrint.FP_GetDeviceDescription(out devDes); if (ret != ErrorCode.FP_STATUS_OK) { this.rt_log.AppendText("[E] FP_GetDeviceDescription - ErrorCode = " + ret.ToString() + Environment.NewLine); } else { this.rt_log.AppendText(devDes.ToString() + Environment.NewLine); btn_Reset.Enabled = true; btn_Start.Enabled = true; btn_interrupt.Enabled = true; btn_interrupt.BackColor = Color.PaleVioletRed; gb_ROIC_op.Enabled = true; gb_PWM.Enabled = true; ushort duty, freq; ret = Viewer.fingerPrint.FP_GetPWMPara(out freq, out duty); if (ret != ErrorCode.FP_STATUS_OK) { this.rt_log.AppendText("[E] GET PWM - ErrorCode = " + ret.ToString() + Environment.NewLine); } else { Viewer.PWMDuty_memory = duty; tb_PWM_Duty.Text = Convert.ToString(duty); tb_PWM_Freq.Text = Convert.ToString(freq); cb_DebugLog_Level.SelectedIndex = (int)Viewer.debuglevel; } byte o_cfb; Viewer.fingerPrint.FP_GetSensorCfb(out o_cfb); num_cfb.Value = o_cfb * num_cfb.Increment; byte o_pgagain; Viewer.fingerPrint.FP_GetSensorPGAGain(out o_pgagain); num_pgagain_A.Value = o_pgagain / 16 + 1; num_pgagain_B.Value = o_pgagain % 16 + 1; ushort o_vos; Viewer.fingerPrint.FP_GetSensorADCOffset(out o_vos); num_vos.Value = o_vos; num_cfb.ValueChanged += num_cfb_ValueChanged; num_pgagain_A.ValueChanged += num_pgagain_ValueChanged; num_pgagain_B.ValueChanged += num_pgagain_ValueChanged; num_vos.ValueChanged += num_vos_ValueChanged; num_cfb.MouseWheel += new MouseEventHandler(Num_MouseWheel_DoNothing); num_pgagain_A.MouseWheel += new MouseEventHandler(Num_MouseWheel_DoNothing); num_pgagain_B.MouseWheel += new MouseEventHandler(Num_MouseWheel_DoNothing); num_vos.MouseWheel += new MouseEventHandler(Num_MouseWheel_DoNothing); } rt_log.Select(rt_log.Text.Length - 1, 0); rt_log.ScrollToCaret(); } else { Viewer._Initial = false; rt_log.Text += "Connect Failed : \n"; rt_log.Select(rt_log.Text.Length - 1, 0); rt_log.ScrollToCaret(); Viewer.fingerPrint.Dispose(); Viewer.fingerPrint = null; btn_connect.Enabled = true; } }
public void ShowImage() { Font font = new Font("Times New Roman", 15, FontStyle.Regular); System.Drawing.SolidBrush penBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green); PointF drawpoint = new PointF(0, 0); Viewer.UpdateStatusCallback UpdateStatusText = ShowStatusText; System.Diagnostics.Stopwatch drawwatch = new System.Diagnostics.Stopwatch(); Viewer.frameTime = 100; Rectangle Panel_rec = new Rectangle(0, 0, 800, 750); int preframe = -1; while (Viewer.tShowImage.IsAlive) { do { Thread.Sleep(10); } while (preframe == Viewer.frameCount); preframe = Viewer.frameCount; if (Viewer.frameCount % 100 > 0 && Viewer.tictoc.Elapsed.TotalMilliseconds > 0) { Viewer.frameTime = Convert.ToInt32(Viewer.tictoc.Elapsed.TotalMilliseconds) / (Convert.ToInt32(Viewer.frameCount % 100)); } Panel_rec.Width = Drawpanel.Width; Panel_rec.Height = Drawpanel.Height; #if DEBUG drawwatch.Reset(); drawwatch.Start(); #endif switch (Viewer.nDataFrameNum) { case 0: Viewer.Draw_graphic.DrawImage(Viewer.bmp0, Panel_rec); Viewer._Buffer0 = false; break; case 1: Viewer.Draw_graphic.DrawImage(Viewer.bmp1, Panel_rec); Viewer._Buffer1 = false; break; case 2: Viewer.Draw_graphic.DrawImage(Viewer.bmp2, Panel_rec); Viewer._Buffer2 = false; break; default: break; } if (Form_Main.Engineering_mode) { Viewer.Draw_graphic.DrawString("FPS : " + ((float)1000 / Viewer.frameTime).ToString("f4"), font, penBrush, drawpoint); } Viewer.Draw_graphic.Flush(); #if DEBUG drawwatch.Stop(); Viewer.drawTime = (int)drawwatch.Elapsed.TotalMilliseconds; Invoke(UpdateStatusText, new Object[] { this.SSL_TN, "Wait Time : " + Viewer.drawTime, null }); #endif } }