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); }
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); }
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); }
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); } }