If you would like to get the image log via F2 or FSF2, we can use this function and method.
Make sure that check out the function BS2_Getimagelog.
Environment.
It was okay until the SDK 2.4.x but the issue happens with SDK 2.5.0 or higher version
Sample code
The order is BS2_GetDeviceInfo ->BS2_SetEventConfig -> BS2_Getimagelog
private void button4_Click(object sender, EventArgs e) { IntPtr versionPtr = API.BS2_Version(); textBox1.Text = "SDK version : {0}" + Marshal.PtrToStringAnsi(versionPtr); IntPtr context = IntPtr.Zero; context = API.BS2_AllocateContext(); if (context == null) //Returns NULL when there is not enough system memory { textBox1.Text = "No memory!"; } else // if not, returns the allocated Context. { textBox1.Text = "Allocate context successfully"; } BS2ErrorCode result = (BS2ErrorCode)API.BS2_Initialize(context); if (result == BS2ErrorCode.BS_SDK_SUCCESS) { textBox1.Text = "Initialization succeeded"; } else { textBox1.Text = "failed to initialize error code"; } string ipAddress = textBox2.Text;// "192.168.13.195"; IntPtr ptrIPAddr = Marshal.StringToHGlobalAnsi(ipAddress); ushort port = 51211; uint deviceId = 0; result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(context, ptrIPAddr, port, out deviceId); BS2AuthConfig authConfig; if (result == BS2ErrorCode.BS_SDK_SUCCESS) { textBox1.Text = "Connecting to device succeeded"; } else { textBox1.Text = "Connecting to device failed" + result; } #region GetImageLog //#region GetImageLog BS2SimpleDeviceInfo deviceInfo; int structSize = Marshal.SizeOf(typeof(BS2Event)); UInt16 imageLogEventCode = (UInt16)BS2EventCodeEnum.DEVICE_TCP_CONNECTED; BS2EventConfig eventConfig = Util.AllocateStructure<BS2EventConfig>(); eventConfig.numImageEventFilter = 1; eventConfig.imageEventFilter[0].mainEventCode = (byte)(imageLogEventCode >> 8); eventConfig.imageEventFilter[0].scheduleID = (UInt32)BS2ScheduleIDEnum.ALWAYS; Console.WriteLine("Trying to get the device[{0}] information.", deviceID); result = (BS2ErrorCode)API.BS2_GetDeviceInfo(context, deviceId, out deviceInfo); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Can't get device information(errorCode : {0}).", result); return; } Console.WriteLine("Trying to activate image log."); result = (BS2ErrorCode)API.BS2_SetEventConfig(context, deviceId, ref eventConfig); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } Console.WriteLine("Trying to clear log for quick test."); result = (BS2ErrorCode)API.BS2_ClearLog(context, deviceId); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } Console.WriteLine("Trying to disconnect device[{0}] for quick test.", deviceId); result = (BS2ErrorCode)API.BS2_DisconnectDevice(context, deviceId); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } Thread.Sleep(500); //waiting for socket close Console.WriteLine("Trying to connect device[{0}].", deviceId); //IntPtr ptrIPAddr = Marshal.StringToHGlobalAnsi(new IPAddress(BitConverter.GetBytes(deviceInfo.ipv4Address)).ToString()); //result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(sdkContext, new IPAddress(BitConverter.GetBytes(deviceInfo.ipv4Address)).ToString(), deviceInfo.port, out deviceID); result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(context, ptrIPAddr, deviceInfo.port, out deviceId); Marshal.FreeHGlobal(ptrIPAddr); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } IntPtr outEventLogObjs = IntPtr.Zero; UInt32 outNumEventLogs = 0; result = (BS2ErrorCode)API.BS2_GetLog(context, deviceId, 0, 1024, out outEventLogObjs, out outNumEventLogs); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); return; } if (outNumEventLogs > 0) { IntPtr curEventLogObjs = outEventLogObjs; for (int idx = 0; idx < outNumEventLogs; idx++) { BS2Event eventLog = (BS2Event)Marshal.PtrToStructure(curEventLogObjs, typeof(BS2Event)); //if (Convert.ToBoolean(eventLog.image)) bool hasImage = Convert.ToBoolean(eventLog.image & (byte)BS2EventImageBitPos.BS2_IMAGEFIELD_POS_IMAGE); if (hasImage) { Console.WriteLine("Trying to get image log[{0}].", eventLog.id); IntPtr imageObj = IntPtr.Zero; UInt32 imageSize = 0; result = (BS2ErrorCode)API.BS2_GetImageLog(context, deviceId, eventLog.id, out imageObj, out imageSize); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { Console.WriteLine("Got error({0}).", result); } else { int written = 0; FileStream file = new FileStream(String.Format("{0}.jpg", eventLog.id), FileMode.Create, FileAccess.Write); Console.WriteLine("Trying to save image log[{0}].", eventLog.id); WriteFile(file.Handle, imageObj, (int)imageSize, out written, IntPtr.Zero); file.Close(); if (written != imageSize) { Console.WriteLine("Got error({0}).", result); } else { Console.WriteLine("Successfully saved the image log[{0}].", eventLog.id); Process.Start(file.Name); } } break; } curEventLogObjs = (IntPtr)((long)curEventLogObjs + structSize); } API.BS2_ReleaseObject(outEventLogObjs); } result = (BS2ErrorCode)API.BS2_GetEventConfig(context, deviceId, out eventConfig); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { textBox1.Text = "Get Error" + result; return; } result = (BS2ErrorCode)API.BS2_SetEventConfig(context, deviceId, ref eventConfig); if (result != BS2ErrorCode.BS_SDK_SUCCESS) { textBox1.Text = "Get Error" + result; return; } //#endregion #endregion }