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