Я пытаюсь получить изображение (или, по крайней мере, байтовый массив) с камеры HIKVision, используя свои собственные DLL (написано на C ++).
Мне удалось получить прямой эфир с камеры с задержкой ~ 170 мс. Для этого я поставил элемент управления WindowsFormsHost PictureBox.
Здесь вы можете увидеть мой импорт DLL.
private const string DLL = @"32bit\HCNetSDK.dll";
[DllImport(DLL)]
public static extern bool NET_DVR_Init();
[DllImport(DLL)]
public static extern bool NET_DVR_SetConnectTime(int waitTime, int retries);
[DllImport(DLL)]
public static extern bool NET_DVR_SetReconnect(int interval, bool EnableReccon);
[DllImport(DLL, EntryPoint = "NET_DVR_Login_V40")]
public static extern int NET_DVR_Login_V40(ref Structs.NET_DVR_USER_LOGIN_INFO pLoginInfo, ref Structs.NET_DVR_DEVICEINFO_V40 lpDeviceInfo);
[DllImport(DLL)]
public static extern bool NET_DVR_Cleanup();
[DllImport(DLL)]
public static extern bool NET_DVR_Logout(int UserID);
[DllImport(DLL, EntryPoint = "NET_DVR_RealPlay_V40")]
public static extern int NET_DVR_RealPlay_V40(int lUserID, ref Structs.LPNET_DVR_PREVIEWINFO lpPreviewInfo, REALDATACALLBACK fRealDataCallBack_V30, IntPtr pUser);[DllImport(DLL)]
public static extern int NET_DVR_GetLastError();
[DllImport(DLL)]
public static extern bool NET_DVR_StopRealPlay(int lRealPlayHandle);
Вот мой код, чтобы получить прямой эфир:
Structs.LPNET_DVR_PREVIEWINFO PrevInfo = new Structs.LPNET_DVR_PREVIEWINFO();
PrevInfo.hPlayWnd = this.handler;
PrevInfo.lChannel = 1;
PrevInfo.dwStreamType = 0; //0 - pirminis, 1 - antrinis
PrevInfo.dwLinkMode = 0;
PrevInfo.bBlocked = 1;
PrevInfo.byPreviewMode = 0;
PrevInfo.byStreamID = new byte[Defines.STREAM_ID_LEN];
PrevInfo.byRes = new byte[216];
SDKMethods.DataReceived = VideoCallback;
//PlayerID = SDKMethods.NET_DVR_RealPlay_V40(UserID, ref PrevInfo, null, IntPtr.Zero);
PlayerID = SDKMethods.NET_DVR_RealPlay_V40(UserID, ref PrevInfo, SDKMethods.DataReceived, IntPtr.Zero);
if (PlayerID < 0)
{
int errCode = SDKMethods.NET_DVR_GetLastError();
SDKMethods.NET_DVR_Logout(UserID);
SDKMethods.NET_DVR_Cleanup();
throw new Exception(errors.ErrorByCode(errCode));
}
return true;
this.handler; это IntPtr от этого объекта
<WindowsFormsHost Name="host1" Margin="55,143,41,28">
<winform:PictureBox x:Name="Pic"/>
</WindowsFormsHost>
когда я пытаюсь получить изображение прямо из картинки, я получаю только белый экран. Может быть, кто-нибудь может мне помочь, как получить изображение из обработчика PictureBox?
note // Я не могу использовать методы SDK для сохранения изображения на компьютере, потому что это занимает слишком много времени ..
Задача ещё не решена.
Других решений пока нет …