private void btnLoadBuffer_Click(object sender, EventArgs e) { CSImgT img = LoadImage(); if (!img.isEmpty()) { var dnList = img.getAvalibleDataNames(); foreach (var dn in dnList) { Form f = new Form(); Bitmap src = BuiltGrayBitmap(img.getDataByte(dn), img.get_cols(dn), img.get_rows(dn)); if (dn == DataNames.SEN) { f.Text = "激光线图像 | Sensor Image"; src = BuiltGrayBitmap(img.getDataByte(dn), img.get_cols(dn), img.get_rows(dn)); } else if (dn == DataNames.RAN) { f.Text = "高度图像 | Range Image"; src = BuiltGrayBitmap(img.getDataWord(dn), img.get_cols(dn), img.get_rows(dn)); } else if (dn == DataNames.RAN_CAL) { f.Text = "标定后的高度图像 | Calibrated Range Image"; src = BuiltGrayBitmap(img.getDataFloat(dn), img.get_cols(dn), img.get_rows(dn)); } else if (dn == DataNames.REF) { f.Text = "激光强度图像 | Reflectance Image"; src = BuiltGrayBitmap(img.getDataByte(dn), img.get_cols(dn), img.get_rows(dn)); } else if (dn == DataNames.REF_CAL) { f.Text = "标定后的激光强度图像 | Calibrated Reflectance Image"; src = BuiltGrayBitmap(img.getDataByte(dn), img.get_cols(dn), img.get_rows(dn)); } IntPtr pp = new IntPtr(); Size imgSize = new Size(src.Width / 3, src.Height / 3); f.BackgroundImage = src.GetThumbnailImage(imgSize.Width, imgSize.Height, null, pp); f.Size = new Size(imgSize.Width, imgSize.Height + 30); f.MaximumSize = new Size(imgSize.Width, imgSize.Height + 30); f.Show(); } } }
private void GrabImageTimer(object sender, System.Timers.ElapsedEventArgs e) { // 响应停止请求 if (m_reqStop == 0) { m_reqStop = 1; myTimer.Enabled = false; } if (R3(m_ip).getStatus() == CAM_STATUS.CAM_IS_STARTED && R3(m_ip).isGrabbed()) { CSImgT imgTable = new CSImgT(); if (R3(m_ip).getImageData(imgTable) == CAM_STATUS.All_OK) { Bitmap imgGray; // 读取图片 convert image to show var mode = GetGrabMode(); if (!imgTable.has(mode)) { return; } switch (mode) { case DataNames.SEN: imgGray = BuiltGrayBitmap( imgTable.getDataByte(mode), imgTable.getS_cols(), imgTable.getS_rows() ); break; case DataNames.REF: case DataNames.SCA: case DataNames.REF_CAL: case DataNames.SCA_CAL: case DataNames.REF2: case DataNames.SCA2: case DataNames.REF2_CAL: case DataNames.SCA2_CAL: imgGray = BuiltGrayBitmap( imgTable.getDataByte(mode), imgTable.getR_cols(), imgTable.getR_rows() ); break; case DataNames.RAN: case DataNames.RAN2: imgGray = BuiltGrayBitmap( imgTable.getDataWord(mode), imgTable.getR_cols(), imgTable.getR_rows() ); break; case DataNames.RAN_CAL: case DataNames.RAN2_CAL: imgGray = BuiltGrayBitmap( imgTable.getDataFloat(mode), imgTable.getR_cols(), imgTable.getR_rows() ); break; default: imgTable.Dispose(); return; } // 显示图片 Show Image // Code below will cost a lot of memory. // This is a side effect of C# gc. #if true System.Drawing.Image imgShow = System.Drawing.Image.FromHbitmap(imgGray.GetHbitmap()); pictureBox1.BackgroundImage = imgShow.GetThumbnailImage(pictureBox1.Size.Width, pictureBox1.Size.Height, null, IntPtr.Zero); imgShow.Dispose(); imgGray.Dispose(); imgShow = null; imgGray = null; GC.Collect(); GC.WaitForPendingFinalizers(); #endif lock (m_imgLocker) { m_lastImg._deepCopy(imgTable); } // 响应停止请求 if (m_reqStop == 0) { m_reqStop = 1; myTimer.Enabled = false; } // show ID wFlog(imgTable.get_ID().ToString()); } imgTable.Dispose(); GC.Collect(); GC.WaitForPendingFinalizers(); } }