////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : StartSingleGrab //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public override bool HLStartSingleGrab() { bool bReturn = false; do { if (null != m_objCallback) { if (0 == m_lstImageData.Count) { break; } CImageData objImageData = m_lstImageData[m_iImageIndex].Clone() as CImageData; objImageData.iImageWidth = objImageData.bitmapImage.Width; objImageData.iImageWidth = objImageData.bitmapImage.Height; m_objCallback(( CImageData )objImageData.Clone()); } m_iImageIndex++; if (m_iImageIndex >= m_lstImageData.Count) { m_iImageIndex = 0; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private void OnImageReadyEventCallback() { try { CDeviceCameraImageProviderBasler.Image objImage = null;// m_objImageProvider.GetCurrentImage(); if (null != objImage) { if (BitmapFactory.IsCompatible(m_objBitImage, objImage.Width, objImage.Height, objImage.Color)) { } else { // 비트맵으로 호환 가능한 경우 비트맵 이미지 생성 BitmapFactory.CreateBitmap(out m_objBitImage, objImage.Width, objImage.Height, false); } BitmapFactory.UpdateBitmap(m_objBitImage, objImage.Buffer, objImage.Width, objImage.Height, objImage.Color); // 멀티그랩에서 사용될 인덱스 // 하이브 소스코드를 참고함 if (m_iMultiGrabIndex >= m_iMaxCountMultiGrab) { m_iMultiGrabIndex = 0; } if (null != m_objCallback) { CImageData objData = new CImageData(); objData.bGrabComplete = true; objData.bitmapImage = m_objBitImage;// ( Bitmap )m_objBitImage.Clone(); objData.iImageWidth = m_objBitImage.Width; objData.iImageHeight = m_objBitImage.Height; objData.iMultiGrabImageIndex = m_iMultiGrabIndex; m_objCallback(objData); } iGCCollectCount++; if (4 < iGCCollectCount) { GC.Collect(); iGCCollectCount = 0; } } } catch (System.Exception ex) { if (null != m_objCallbackTraceMessage) { m_objCallbackTraceMessage(ex.Message + "->" + ex.StackTrace); } } }
public object Clone() { CImageData objImageData = new CImageData(); objImageData.bGrabComplete = bGrabComplete; objImageData.bitmapImage = ( Bitmap )bitmapImage.Clone(); objImageData.iImageWidth = iImageWidth; objImageData.iImageHeight = iImageHeight; objImageData.iMultiGrabImageIndex = iMultiGrabImageIndex; objImageData.objCameraData3D = objCameraData3D; return(objImageData); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 이미지로딩 검사 //설명 : ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public override bool HLSetImageFile(string strPath) { bool bReturn = false; do { var pDocument = DeepSight.CDocument.GetDocument; try { m_lstImageData.Clear(); m_iImageIndex = 0; // 프로젝트 bin 폴더 // 수정 - 타입 & 카메라별 시뮬레이션 이미지 폴더 따로 관리 string strImagePath = strPath; // 폴더 내 파일 목록 불러오기 string[] arFileNames = System.IO.Directory.GetFiles(strImagePath + "\\"); // 폴더 내의 파일 수만큼 루프 for (int iLoopCount = 0; iLoopCount < arFileNames.Length; iLoopCount++) { if (-1 != arFileNames[iLoopCount].IndexOf("Origin_VIDI")) { CImageData objImageData = new CImageData(); objImageData.bitmapImage = new Bitmap(arFileNames[iLoopCount]); objImageData.bGrabComplete = true; m_lstImageData.Add(objImageData); } } arFileNames = System.IO.Directory.GetFiles(strImagePath + "\\"); // 폴더 내의 파일 수만큼 루프 for (int iLoopCount = 0; iLoopCount < arFileNames.Length; iLoopCount++) { if (-1 != arFileNames[iLoopCount].IndexOf("Origin_Measure")) { CImageData objImageData = new CImageData(); objImageData.bitmapImage = new Bitmap(arFileNames[iLoopCount]); objImageData.bGrabComplete = true; m_lstImageData.Add(objImageData); } } } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : 특정 폴더 이미지를 로딩하여 가상 모드에서 사용 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool InitializeImage() { bool bReturn = false; do { var pDocument = DeepSight.CDocument.GetDocument; try { // 프로젝트 bin 폴더 // 수정 - 타입 & 카메라별 시뮬레이션 이미지 폴더 따로 관리 string strImagePath = string.Format(@"{0}\{1}\{2}\{3}{4:D}", System.IO.Directory.GetCurrentDirectory(), DeepSight.CDefine.DEF_SIMULATION_IMAGE_PATH, pDocument.m_objConfig.GetSystemParameter().eMachineType.ToString(), DeepSight.CDefine.DEF_SIMULATION_IMAGE_PATH, m_iCameraIndex); // 폴더 내 파일 목록 불러오기 string[] arFileNames = System.IO.Directory.GetFiles(strImagePath + "\\"); // 폴더 내의 파일 수만큼 루프 for (int iLoopCount = 0; iLoopCount < arFileNames.Length; iLoopCount++) { CImageData objImageData = new CImageData(); objImageData.bitmapImage = new Bitmap(arFileNames[iLoopCount]); objImageData.bGrabComplete = true; m_lstImageData.Add(objImageData); } } catch (System.Exception ex) { if (null != m_objCallbackTraceMessage) { m_objCallbackTraceMessage(ex.Message + "->" + ex.StackTrace); } break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //수정 : //목적 : StartSingleGrab //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public override bool HLStartMultiGrab() { bool bReturn = false; do { if (null != m_objCallback) { if (0 == m_lstImageData.Count) { break; } for (int iLoopCount = 0; iLoopCount < DEF_COUNT_MULTI_GRAB; iLoopCount++) { CImageData objImageData = m_lstImageData[m_iImageIndex].Clone() as CImageData; objImageData.iImageWidth = objImageData.bitmapImage.Width; objImageData.iImageHeight = objImageData.bitmapImage.Height; objImageData.iMultiGrabImageIndex = iLoopCount; m_objCallback(( CImageData )objImageData.Clone()); m_iImageIndex++; if (m_iImageIndex >= m_lstImageData.Count) { m_iImageIndex = 0; } } } bReturn = true; } while (false); return(bReturn); }
public void ReceiveData(KObject data) { // 데이터 들어오면 카메라 시스템 정지 var pDocument = DeepSight.CDocument.GetDocument; //if( CDefine.enumTrigger.TRIGGER_OFF == pDocument.GetTrigger( ( int )CDefine.enumCamera.CAMERA_1 ) ) return; m_objCameraSystem.Stop(); CImageData3D objImageData3D = new CImageData3D(); // 일단 해상도를 임의로 지정하자 GoDataSet dataSet = ( GoDataSet )data; pDocument.SetUpdateLog(CDefine.enumLogType.LOG_PROCESS, "GOCATOR RECEIVE DATA : " + dataSet.Count.ToString()); for (UInt32 i = 0; i < dataSet.Count; i++) { GoDataMsg dataObj = ( GoDataMsg )dataSet.Get(i); switch (dataObj.MessageType) { case GoDataMessageType.Stamp: { GoStampMsg stampMsg = ( GoStampMsg )dataObj; for (UInt32 j = 0; j < stampMsg.Count; j++) { GoStamp stamp = stampMsg.Get(j); Console.WriteLine("Frame Index = {0}", stamp.FrameIndex); Console.WriteLine("Time Stamp = {0}", stamp.Timestamp); Console.WriteLine("Encoder Value = {0}", stamp.Encoder); } } break; case GoDataMessageType.UniformSurface: { #pragma warning disable CS0618 // 형식 또는 멤버는 사용되지 않습니다. GoSurfaceMsg surfaceMsg = ( GoSurfaceMsg )dataObj; #pragma warning restore CS0618 // 형식 또는 멤버는 사용되지 않습니다. objImageData3D.iOffsetZ = surfaceMsg.ZOffset; objImageData3D.iResolutionX = surfaceMsg.XResolution; // * DEF_3D_DATA_MULTIPLE; objImageData3D.iResolutionY = surfaceMsg.YResolution; objImageData3D.iResolutionZ = surfaceMsg.ZResolution; int lWidth = objImageData3D.iWidth = ( int )surfaceMsg.Width; int lHeight = objImageData3D.iHeight = ( int )surfaceMsg.Length; int bufferSize = lWidth * lHeight; IntPtr bufferPointer = surfaceMsg.Data; Console.WriteLine("Whole Part Height Map received:"); Console.WriteLine(" Buffer width: {0}", lWidth); Console.WriteLine(" Buffer Height: {0}", lHeight); objImageData3D.objHeightDataOrigin = new short[bufferSize]; Marshal.Copy(bufferPointer, objImageData3D.objHeightDataOrigin, 0, objImageData3D.objHeightDataOrigin.Length); // SetDataToCsv("d:\\test.csv", objImageData3D.objHeightDataOrigin); } break; case GoDataMessageType.SurfaceIntensity: { GoSurfaceIntensityMsg surfaceMsg = ( GoSurfaceIntensityMsg )dataObj; long width = surfaceMsg.Width; long length = surfaceMsg.Length; long bufferSize = width * length; IntPtr bufferPointeri = surfaceMsg.Data; Console.WriteLine("Whole Part Intensity Image received:"); Console.WriteLine(" Buffer width: {0}", width); Console.WriteLine(" Buffer length: {0}", length); objImageData3D.objIntensityDataOrigin = new byte[bufferSize]; Marshal.Copy(bufferPointeri, objImageData3D.objIntensityDataOrigin, 0, objImageData3D.objIntensityDataOrigin.Length); // objImageData3D.objBitmapIntensity = CopyDataToBitmap( ( int )length, ( int )width, objImageData3D.objIntensityDataOrigin ); // objImageData3D.objBitmapIntensity.Save( "d:\\Intensity.bmp" ); } break; default: break; } } if (null != m_objCallback) { CImageData objData = new CImageData(); objData.bGrabComplete = true; objData.bitmapImage = objImageData3D.objBitmapIntensity; objData.objCameraData3D = objImageData3D; m_objCallback(objData); } iGCCollectCount++; if (1 < iGCCollectCount) { GC.Collect(); iGCCollectCount = 0; } }