问一个接口开发的问题,SetOsdDisplayMode
怎么我用这一个函数会出现乱码?是海康压缩卡的SDK[ds40xxsdk.dll]
官方的SDK是
=========================================================================
4.42 SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness, BOOL Translucent, int TwinkleInterval, USHORT *Format1, USHORT *Format2)
参数:HANDLE hChannelHandle 通道句柄
int Brightness OSD显示亮度,255最亮,0最暗;
BOOL Translucent OSD图象是否做半透明处理;
Int TwinkleInterval (V3.2改动为:当值为1时,OSD的亮度根据背景的亮度来调整,但背景较亮时,OSD亮度自动调低,但背景较暗时,OSD亮度自动调亮。原来的闪烁功能关闭)3.2版本之前请参考4.41节描述。
USHORT *Forma1,* Format2 描述字符叠加的位置和次序的格式
串,具体定义如下:
USHORT X, USHORT Y, CHAR0, CHAR1, CHAR2,… CHARN, NULL
其中X,Y 是该字串在标准CIF图象的起始位置,X必须是8的倍数,Y可以在图象高度内取值即(0-287)PAL 、(0-239)NTSC;CHARN也是USHORT型的参数,可以是ASCII码也可以是汉字,当想要显示当前时间时,可以指定为固定的时间定义值,其值如下:
_OSD_YEAR4 四位的年显示,如2002
_OSD_YEAR2 两位的年显示,如02
_OSD_MONTH3 英文的月显示,如 Jan
_OSD_MONTH2 两位阿拉伯数字的月显示,如07
_OSD_DAY 两位的阿拉伯数字的日显示,如31
_OSD_WEEK3 英文的星期显示,如Tue
_OSD_CWEEK1 中文的星期显示,如星期二
_OSD_HOUR24 24小时的时钟显示,如18
_OSD_HOUR12 12小时的时钟显示,如AM09或PM09
_OSD_MINUTE 两位分钟的显示
_OSD_SECOND 两位秒的显示
在格式字符串的最后必须以NULL(0)结尾,否则会显示错误的内容。
字符串和时间显示可以在FORMAT1 也可以在FORAMT2,也可以混合在一起,但不得超过一行CIF 图象的宽度。
要显示位置在16,19的字符串“办公室”的格式字符串如下:
USHORT Format[] = {16, 19, ‘办’,’公’,’室’, ‘\0’};
要显示位置在8, 3的时间字符串可以如下:
USHORT Format[]={8, 3, _OSD_YEAR4, ‘年’,_OSD_MONTH2,’月’,_OSD_DAY, ‘日’,_OSD_HOUR24,’:’, _OSD_MINUTE, ‘:’, _OSD_SECOND, ‘\0’};
DS-400xH 系列 SDK 说明书 13
海康威视技术文档(版权所有)
如果只想显示其中一行,则将起始的字符串定义如下:
USHORT FormatNoDisplay[]={0, 0, ‘\0’};
==========================================================================================
下面是我调用的
引用:
==========================================================================================
function SetOsdDisplayMode(hChannelHandle:integer;Brightness:integer;Translucent:bool;param:integer;Format1,format2:pointer):integer;stdcall;
==========================================================================================
var
Format1,Format2:array[0..40] of Word ;
_OSD_YEAR4,_OSD_MONTH2,_OSD_DAY,_OSD_HOUR24,_OSD_MINUTE,_OSD_SECOND:word;
begin
Format1[0]:=0;
Format1[1]:=0;
Format1[2]:= Ord(' ') ;
Format1[3]:= _OSD_YEAR4;
Format1[4]:= Ord('-') ;
Format1[5]:= _OSD_MONTH2;
Format1[6]:= Ord('-') ;
Format1[7]:= _OSD_DAY;
Format1[8]:= Ord(#0) ;
Format2[0]:= Ord(#0) ;
SetOsdDisplayMode(0,255, false,1, @Format1, @Format2);
setosd(0,true); //这个是启动的
end;
==========================================================================================