程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#視頻監控系列(13):H264播放器——控制播放和截圖(5)

C#視頻監控系列(13):H264播放器——控制播放和截圖(5)

編輯:關於C語言

二、截圖

VC++ Code:

//////////////////////////////////////////////////////////////////
//Function:The call back funtion for capture image!
/////////////////////////////////////////////////////////////////
void CALLBACK DisplayCBFun(long nPort,\
                           char * pBuf,long nSize,\
                           long nWidth,long nHeight,\
                           long nStamp,long nType,long nReceaved)
{
    if(!g_bCapPic)
        return;
    CString csFile;
    csFile.Format("capture%02d.bmp",pic);
    /*    switch(nType)
    {
    case T_UYVY:
    csFile="uyvy.bmp";
    break;
    case T_YV12:
    csFile="yv12.bmp";
    break;
    case T_RGB32:
    csFile="rgb.bmp";
    break;
    default: 
    return ;
}*/
    //Note:this funtion is slow,so if you want to save as a .bmp file,don't call! 
    if(!Hik_PLayM4_ConvertToBmpFile(pBuf,nSize,nWidth,nHeight,nType,csFile.GetBuffer(csFile.GetLength())))
    {
        CString csErr;
        csErr.Format("Convert to bmp faild(%d).",Hik_PlayM4_GetLastError(nPort));
        AfxMessageBox(csErr);
    }
    pic++;
    g_bCapPic=FALSE;
}

C# Code:

DisplayCBFun DisCB;
/// <summary>
/// 截圖
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCapImage_Click(object sender, EventArgs e)
{
DisCB = new DisplayCBFun(DisplayCBFun);
HikPlayer.Hik_PlayM4_SetDisplayCallBack(PORT, DisCB);
}
/// <summary>
/// 截圖回調函數
/// </summary>
/// <param name="nPort"></param>
/// <param name="pBuf"></param>
/// <param name="nSize"></param>
/// <param name="nWidth"></param>
/// <param name="nHeight"></param>
/// <param name="nStamp"></param>
/// <param name="nType"></param>
/// <param name="nReceaved"></param>
public void DisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved)
{
if (HikPlayer.Hik_PLayM4_ConvertToBmpFile(pBuf, nSize, nWidth, nHeight, nType, string.Format("C:\\capture{0}.bmp", nPort)))
{
MessageBox.Show("轉換bmp失敗!");
}
//停止回調
HikPlayer.Hik_PlayM4_SetDisplayCallBack(PORT, null);
}

代碼說明:

1. 這裡和源代碼有點出入,他用的是g_bCapPic變量來控制是否捕獲圖片,我用的是設置委托實例和null來達到。API說明:設置抓圖回調 函數;注意要盡快返回,如果要停止回調,可以把回調函數指針DisplayCBFun設為NULL。

結束

現在在做語音部分,受阻中...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved