Захват изображения из IntPtr с использованием emgucv и hikvision SDK DLL C# WPF

Я пытаюсь получить изображение (или, по крайней мере, байтовый массив) с камеры 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 для сохранения изображения на компьютере, потому что это занимает слишком много времени..

0 ответов

Другие вопросы по тегам