コード例 #1
0
        public override BitmapSource GetImage(DoWorkEventArgs e)
        {
            PtGreyCameraImage helper = (PtGreyCameraImage)e.Argument;
            BitmapSource      source;

            //helper.cam.RetrieveBuffer(helper.raw);
            //helper.raw.ConvertToBitmapSource(helper.converted);
            IManagedImage managedImage = helper.cam.GetNextImage();

            if (managedImage.IsIncomplete)
            {
                Console.WriteLine("GetNextImage Incompleted");
                return(null);
            }
            managedImage.ConvertToBitmapSource(PixelFormatEnums.BGR8, helper.converted);
            if ((Properties.Settings.Default.CropHeight == 0 && Properties.Settings.Default.CropWidth == 0) ||
                (Properties.Settings.Default.CropHeight + Properties.Settings.Default.CropTop > helper.converted.bitmapsource.Height) ||
                (Properties.Settings.Default.CropWidth + Properties.Settings.Default.CropLeft > helper.converted.bitmapsource.Width)
                )
            {
                source          = helper.converted.bitmapsource;
                CropImageWidth  = 0;
                CropImageHeight = 0;
            }
            else
            {
                source = new CroppedBitmap(helper.converted.bitmapsource,
                                           new System.Windows.Int32Rect((int)Properties.Settings.Default.CropLeft,
                                                                        (int)Properties.Settings.Default.CropTop,
                                                                        (int)(Properties.Settings.Default.CropWidth == 0 ?
                                                                              helper.converted.bitmapsource.Width : Properties.Settings.Default.CropWidth),
                                                                        (int)(Properties.Settings.Default.CropHeight == 0 ?
                                                                              helper.converted.bitmapsource.Height : Properties.Settings.Default.CropHeight)));
                CropImageWidth  = source.Width;
                CropImageHeight = source.Height;
            }
            source.Freeze();
            ImageWidth  = helper.converted.bitmapsource.Width;
            ImageHeight = helper.converted.bitmapsource.Height;
            managedImage.Release();
            return(source);
        }
コード例 #2
0
        public override Bitmap GrabImageBitmap(PixelType pixelType)
        {
            Bitmap image = null;

            try
            {
                ClearBeforeNewOne();
                IManagedImage m_rawImage = m_Camera.GetNextImage();
                if (m_rawImage.ImageStatus != ImageStatus.IMAGE_NO_ERROR)
                {
                    LogHelper.AppLoger.Error("grab img error,error:" + m_rawImage.ImageStatus);
                }
                lock (this)
                {
                    if (pixelType == PixelType.BGR8)
                    {
                        using (IManagedImage convertedImage = m_rawImage.Convert(PixelFormatEnums.BGR8))
                        {
                            image = convertedImage.bitmap.Clone() as Bitmap;
                        }
                    }
                    else if (pixelType == PixelType.Mono8)
                    {
                        using (IManagedImage convertedImage = m_rawImage.Convert(PixelFormatEnums.Mono8))
                        {
                            image = convertedImage.bitmap.Clone() as Bitmap;
                        }
                    }
                    m_rawImage.Release();
                }
            }
            catch (Exception ex)
            {
                LogHelper.AppLoger.Error(ex);
            }
            return(image);
        }
コード例 #3
0
 public override byte[] GrabImageBytes(PixelType pixelType, UInt64 timeout)
 {
     byte[] image = null;
     try
     {
         //ClearBeforeNewOne();
         IManagedImage m_rawImage = m_Camera.GetNextImage(timeout);
         if (m_rawImage.ImageStatus != ImageStatus.IMAGE_NO_ERROR)
         {
             LogHelper.AppLoger.Error("grab img error,error:" + m_rawImage.ImageStatus);
         }
         lock (this)
         {
             if (pixelType == PixelType.BGR8)
             {
                 using (IManagedImage convertedImage = m_rawImage.Convert(PixelFormatEnums.BGR8))
                 {
                     image = Utility.GlobalFunction.ImageToBytes(convertedImage.bitmap);
                 }
             }
             else if (pixelType == PixelType.Mono8)
             {
                 using (IManagedImage convertedImage = m_rawImage.Convert(PixelFormatEnums.Mono8))
                 {
                     image = Utility.GlobalFunction.ImageToBytes(convertedImage.bitmap);
                 }
             }
             m_rawImage.Release();
         }
     }
     catch (Exception ex)
     {
         LogHelper.AppLoger.Error(ex);
     }
     return(image);
 }
コード例 #4
0
        private void GrabLoop(object sender, DoWorkEventArgs e)
        {
            try
            {
                BackgroundWorker worker = sender as BackgroundWorker;
                while (m_grabImages)
                {
                    ///20181229,解决和全局聚焦采图冲突
                    if (IsPreMap)
                    {
                        return;
                    }

                    if (m_grabThread.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    if (!IsLiveMode)
                    {
                        if (grabIndexInOneSwath >= SwathBufferCount)
                        {
                            continue;
                        }

                        if (swathIndex >= SwathCount)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        Thread.Sleep(5);
                    }
                    IManagedImage m_rawImage = m_Camera.GetNextImage();
                    if (m_grabImages == false)
                    {
                        return;
                    }
                    if (m_rawImage.ImageStatus != ImageStatus.IMAGE_NO_ERROR)
                    {
                        LogHelper.AppLoger.Error("grab img error,error:" + m_rawImage.ImageStatus);
                    }
                    else
                    {
                        grabIndexInOneSwath++;
                        lock (this)
                        {
                            using (IManagedImage convertedImage = m_rawImage.Convert(PixelFormatEnums.BGR8))
                            {
                                if (swathIndex % 2 == 0)
                                {
                                    if (grabIndexInOneSwath <= BeginSaveIndexPos || grabIndexInOneSwath > BeginSaveIndexNeg + 1)
                                    {
                                        m_rawImage.Release();
                                        continue;
                                    }
                                }
                                if (swathIndex % 2 == 1)
                                {
                                    if (grabIndexInOneSwath <= (SwathBufferCount - BeginSaveIndexNeg - 1) ||
                                        grabIndexInOneSwath > (SwathBufferCount - BeginSaveIndexPos))
                                    {
                                        m_rawImage.Release();
                                        continue;
                                    }
                                }
                                if (SystemStatus.Instance.SaveImgFlag)
                                {
                                    SaveToBuffer(convertedImage.bitmap.Clone() as Bitmap);
                                }
                                byte[] bimg = Utility.GlobalFunction.ImageToBytes(convertedImage.bitmap);
                                ThrowImage(bimg);
                                Trace.WriteLine(string.Format("次数:{0},行号:{1}", grabIndexInOneSwath.ToString(), swathIndex.ToString()));
                            }
                            m_rawImage.Release();
                        }
                    }
                    //worker.ReportProgress(0);
                }
                //m_grabThreadExited.Set();
            }
            catch (Exception ex)
            {
                LogHelper.AppLoger.Error(ex);
            }
        }