首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 視訊監控系列(十):伺服器端進階功能——驗證、畫質設定、字幕疊加、板卡序號(四)

     編輯:關於C語言

三、設定字幕疊加 (OSD Overlay)

常用於顯示公司 LOGO、日期時間等資訊,如下圖黃色區域所示:

VC++ 官方範例 OnSettings()

USHORT Format1[40] = {48, 16, 'H','I','K','V', 'I','S','I','O','N', '\0'};
USHORT Format2[40] = {24, 50, _OSD_YEAR4, '-',_OSD_MONTH2,'-',_OSD_DAY,'-', _OSD_HOUR24, ':', _OSD_MINUTE,':', _OSD_SECOND, '\0'};

for(i = 0; i < GetTotalDSPs(); i++){
    SetOsdDisplayMode(ChannelHandle[i], 255, TRUE, 0, Format1, Format2);
    SetOsd(ChannelHandle[i], TRUE);
}
  • Format1:靜態文字「HIKVISION」,座標 (48, 16)
  • Format2:動態時間格式「YYYY-MM-DD-HH:MM:SS」,座標 (24, 50)
  • 255:顯示模式參數
  • 兩組格式可同時顯示

C# 完整實作

// OSD 特殊字元基底碼
private const ushort _OSD_BASE = 0x9000;
private const ushort _OSD_YEAR4   = _OSD_BASE + 0;
private const ushort _OSD_YEAR2   = _OSD_BASE + 1;
private const ushort _OSD_MONTH3  = _OSD_BASE + 2;
private const ushort _OSD_MONTH2  = _OSD_BASE + 3;
private const ushort _OSD_DAY     = _OSD_BASE + 4;
private const ushort _OSD_WEEK3   = _OSD_BASE + 5;
private const ushort _OSD_CWEEK1  = _OSD_BASE + 6;
private const ushort _OSD_HOUR24  = _OSD_BASE + 7;
private const ushort _OSD_HOUR12  = _OSD_BASE + 8;
private const ushort _OSD_MINUTE  = _OSD_BASE + 9;
private const ushort _OSD_SECOND  = _OSD_BASE + 10;

/// 
/// 設定 OSD 字幕疊加
/// 
/// 通道控制碼陣列
/// true=開啟, false=關閉
public void SetOsd(IntPtr[] ChannelHandle, bool setValue)
{
    if (setValue)
    {
        // 格式一:公司名稱
        ushort[] Format1 = new ushort[]{ 48, 16, 'H', 'I', 'K', 'V', 'I', 'S', 'I', 'O', 'N', '\0' };
        
        // 格式二:日期時間 YYYY-MM-DD HH:MM:SS
        ushort[] Format2 = new ushort[]{ 
            24, 50, 
            _OSD_YEAR4, '-', _OSD_MONTH2, '-', _OSD_DAY, '-', 
            _OSD_HOUR24, ':', _OSD_MINUTE, ':', _OSD_SECOND, '\0' 
        };

        for (int i = 0; i < ChannelHandle.Length; i++)
        {
            HikVisionSDK.SetOsdDisplayMode(ChannelHandle[i], 255, true, 0, Format1, Format2);
            HikVisionSDK.SetOsd(ChannelHandle[i], true);
        }
    }
    else
    {
        for (int i = 0; i < ChannelHandle.Length; i++)
        {
            HikVisionSDK.SetOsd(ChannelHandle[i], false);
        }
    }
}

關鍵技術點與已知限制

  1. 中文字元問題:目前 SetOsdDisplayMode 參數為 ushort[],嘗試填入中文機內碼 (如 0xB1A3) 理論可行,但實測官方 SDK 尚未完整支援中文顯示,仍在研究中
  2. 時間格式豐富:支援年(2/4碼)、月(2/3碼)、日、週、時(12/24制)、分、秒等組合,詳細請參考 API 文件 _OSD_* 常數定義
  3. 座標系統:前兩個 ushort 為 X、Y 座標,原點通常在影像左上角,單位為像素
  4. 多通道同步:迴圈對所有通道套用相同 OSD 設定,若需各通道不同內容,需在迴圈內動態產生格式陣列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved