Macro AcquireSnapshots() Test() End Function Test() // Specify the number of images to acquire and maximum duration of the acquisition. // The script will stop the acquisition when either of the two conditions is met, whichever // come first. Variable sidx_limit_snapshot_count = 10 Variable sidx_limit_duration_s = 10 // Each acquisition acquires one image with a particular exposure duration. Variable exposure_duration_s = 0.01 Variable exposure_duration_increment_s = 0.01 String image_wave_name_base = "Frame" String image_wave_name Variable sidx_status sidx_status = CameraOpen() if (sidx_status != 0) return 0 endif variable index_acquired for(index_acquired = 0; index_acquired < sidx_limit_snapshot_count; index_acquired++) // Acquire multiple single frame with variable exposure_duration_s image_wave_name = image_wave_name_base + num2str(index_acquired) sidx_status = CameraSetUp(exposure_duration_s) if (sidx_status != 0) CameraClose() return 0 endif sidx_status = CameraAcquireOneImage(image_wave_name, sidx_limit_duration_s) if (sidx_status != 0) CameraClose() return 0 endif exposure_duration_s += exposure_duration_increment_s endfor CameraClose() End Static Function CameraClose() Variable sidx_status NVAR /Z sidx_camera_local = root:sidx_camera if (NVAR_Exists(sidx_camera_local)) if (sidx_camera_local != 0) SIDXCameraClose sidx_camera_local, sidx_status sidx_camera_local = 0 endif endif NVAR /Z sidx_root_local = root:sidx_root if (NVAR_Exists(sidx_root_local)) if (sidx_root_local != 0) SIDXRootClose sidx_root_local, sidx_status sidx_root_local = 0 endif endif End Static Function CameraOpen() Variable sidx_camera_index = 0 Variable sidx_status Variable sidx_root_local String sidx_license = "" SIDXRootOpen sidx_root_local, sidx_license, sidx_status if (sidx_status != 0) printf "SIDXRootOpen failed\r" return sidx_status endif SIDXRootCameraScan sidx_root_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraScan") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif String sidx_camera_name = "" SIDXRootCameraScanGetName sidx_root_local, sidx_camera_index, sidx_camera_name, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraScanGetName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif Variable sidx_camera_local SIDXRootCameraOpenName sidx_root_local, sidx_camera_name, sidx_camera_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraOpenName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif Variable/G sidx_root = sidx_root_local Variable/G sidx_camera = sidx_camera_local return sidx_status End Static Function CameraSetUp(exposure_duration_s) Variable exposure_duration_s Variable sidx_status NVAR sidx_camera_local = root:sidx_camera // Set exposure duration here SIDXCameraExposeSet sidx_camera_local, exposure_duration_s, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraExposeSet") return sidx_status endif SIDXCameraAcquireImageSetLimit sidx_camera_local, 1, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraAcquireImageSetLimit") return sidx_status endif return sidx_status End Static Function CameraAcquireOneImage(image_wave_name, sidx_limit_duration_s) String image_wave_name Variable sidx_limit_duration_s Variable sidx_status Variable start_time_ticks = ticks Variable end_time_ticks Variable acquire_duration_s Variable sidx_acquire_local NVAR sidx_camera_local = root:sidx_camera // Get the current exposure value variable exposure_set SIDXCameraExposeGetValue sidx_camera_local, exposure_set, sidx_status if (sidx_status == 0) printf "Exposure value set: %fs\r", exposure_set endif SIDXCameraAcquireOpen sidx_camera_local, sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraAcquireOpen") return sidx_status endif Variable image_width_pixel Variable image_height_pixel SIDXGeometryPixelGetCount sidx_acquire_local, image_width_pixel, image_height_pixel, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXGeometryPixelGetCount") return sidx_status endif // This is the wave to store one acquired image Make/O/W/U/N=(image_width_pixel, image_height_pixel, 1) $image_wave_name SIDXAcquireStart sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireStart") SIDXAcquireClose sidx_acquire_local, sidx_status return sidx_status endif Variable sidx_image_count = 0 Variable sidx_acquiring = 1 do Sleep /T 1 Variable keys = GetKeyState(0) if ((keys & 32) != 0) // The escape key is pressed. Terminate the acquisition break; endif SIDXAcquireGetStatus sidx_acquire_local, sidx_acquiring, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireGetStatus") break endif SIDXAcquireImageGetCount sidx_acquire_local, sidx_image_count, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireImageGetCount") break endif if (sidx_image_count > 0) // Read available images into an existing IGOR 3D wave SIDXAcquireReadReplace sidx_acquire_local, 1, $image_wave_name, 0, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireReadReplace") break endif printf "Acquired one frame at exposure time %fs.\r", exposure_set break endif end_time_ticks = ticks acquire_duration_s = (end_time_ticks - start_time_ticks) / 60 while (sidx_acquiring && (acquire_duration_s < sidx_limit_duration_s)) SIDXAcquireAbort sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireAbort") SIDXAcquireClose sidx_acquire_local, sidx_status return sidx_status endif CheckDisplayed/A $image_wave_name if (V_flag != 0) DoUpdate else Display; AppendImage $image_wave_name endif SIDXAcquireClose sidx_acquire_local, sidx_status return sidx_status End Static Function ErrorSIDXRoot(sidx_root_local, function_name) Variable sidx_root_local String function_name String message_root = "" Variable status SIDXRootGetLastError sidx_root_local, message_root printf "%s: %s\r", function_name, message_root SIDXRootClose sidx_root_local, status End Static Function ErrorSIDXCamera(sidx_camera_local, function_name) Variable sidx_camera_local String function_name String message_camera = "" Variable status SIDXCameraGetLastError sidx_camera_local, message_camera printf "%s: %s\r", function_name, message_camera End Static Function ErrorSIDXAcquire(sidx_acquire_local, function_name) Variable sidx_acquire_local String function_name String message_acquire = "" Variable status SIDXAcquireGetLastError sidx_acquire_local, message_acquire printf "%s: %s\r", function_name, message_acquire End