C++语言如何转换为delphi,在线等...(100分)

  • 主题发起人 主题发起人 rzqcjwrz
  • 开始时间 开始时间
R

rzqcjwrz

Unregistered / Unconfirmed
GUEST, unregistred user!
USHORT Format1[] = {24, 240, _OSD_YEAR2, '-',_OSD_MONTH2,'-',_OSD_DAY,'-', _OSD_HOUR24, ':', _OSD_MINUTE,':', _OSD_SECOND, '/0'};
C++语言如何转为delphi.
 
dll文件中的函数定义:
function SetOsdDisplayMode(hChannelHandle:integer;Brightness:integer;Translucent:bool;param:integer;Format1,format2:PWord):integer;stdcall;
 
var

format1,format2:array[0..13] of word;

_OSD_YEAR4,_OSD_MONTH2,_OSD_DAY,_OSD_HOUR24,_OSD_MINUTE,_OSD_SECOND:word;

begin

Format1[0] := 24;

Format1[1] := 240;

Format1[2] := _OSD_YEAR4;

Format1[3] := ord('-');

Format1[4] := _OSD_MONTH2;

Format1[5] := ord('-');

Format1[6] := _OSD_DAY;

Format1[7] := ord('-');

Format1[8] := _OSD_HOUR24;

Format1[9] := ord(':');

Format1[10] := _OSD_MINUTE;

Format1[11] := ord(':');

Format1[12] := _OSD_SECOND;

Format1[13] :=ord(#0);

Format2[0] := 24;

Format2[1] := 250;

Format2[2] := _OSD_YEAR4;

Format2[3] := ord('-');

Format2[4] := _OSD_MONTH2;

Format2[5] := ord('-');

Format2[6] := _OSD_DAY;

Format2[7] := ord('-');

Format2[8] := _OSD_HOUR24;

Format2[9] := ord(':');

Format2[10] := _OSD_MINUTE;

Format2[11] := ord(':');

Format2[12] := _OSD_SECOND;

Format2[13] :=ord(#0);



SetOsdDisplayMode(chanl,255, true,1, @Format1, @Format2);

// SetOsd(chanl,true);//设置OSD显示与否

我这样写之后,不能在屏幕上显示出叠加.

5.16设置OSD、LOGO及视频遮挡



5049. 设置OSD显示模式:SetOsdDisp



函数:int SetOsdDilayMode(HANDL



int param, USHORT *Format1, USHO



参数:HANDLE hChannelHandle 通道句柄



int Brightness OSD显示亮度,255最亮,0最暗;

BOOL







Bit 0: 是否自动进行颜色翻转。





Bit 24-31: 水平放大倍数



在OSD字符中,ASCII字符的标准分辨率为



由于在编码之前需要对原始图像进行缩小才能产生编码所需的分辨率,此时就需要先把

OSD字符放大以后再叠加在4CIF的原始图像上,这样才能保证在缩



看清OSD字符。



如果不指定放大倍数(默认设置),则系统



何分辨率下都可以保证回放时能够看清OSD内容,但



中不固定。





为了避免上面的现象,用户可以指定OSD的大小。例如,如果应用程序想以



这时候可以将放大系数设为2、2,此时OSD的位置始终固定



不同的编码分辨率下,OSD字符的分辨率也不同,所以需要



IF录像,则OSD字符会变得模糊不清(因为QCIF要对图像进行1/4缩小,而对OSD



进行了2倍的放大)。具体配置详见下表:



平放大倍数 垂直放大倍数 适合的录像分辨率 说明



其它分辨率下会模



1 2 2CIF 小于2CIF时无法分辩



CIF、DCIF QCIF时无法分辩

4 4 QCIF 在其它分辨率下字符会很大

任意系数为0 自动设置(默认值)

其它无效值 按水平2、垂直2处理

:因为字符的位置会随着不同的



位置可能会超出图像的范围,此时这些字符将无



USHORT *Forma1, *Format2



USHORT X, USHORT Y, CHAR0, CHAR1, C



其中X,Y 该串在标准4CIF图象的起始位置,X



象高度内取值即(0-575)PAL 、(0-479)NTSC;



是ASCII码也可以是字,当想要显示当前时间时



如下:



_OSD_YEAR4 四位的年显示,如2004



_OSD_YEAR2 两位的年显示,如



_OSD_MONTH3 英文的月显示,



_OSD_MONTH2 两位阿拉伯数字的月显示,如07



_



D_WEEK3 英文的星期显示,如Tue



_D_CWEEK1 中文的星期显示,如星期二

_OSD_HOUR24 24



SD_



_



ECOND 两位秒的显示





式字符串的最后必须以NULL(0)结尾,否则会显示错误的



字符串和时间显示可以在FORMAT1 也可以在FORAMT2,也可



图象的宽度。









要显示位置在16,19的字符串“办公室”的格式字符串如下:

USHORT Forma







HORT rmat[]={8, 3, _OSD_YEAR4, ‘年’,_OSD_MON





‘日



只想显示其中一行,则将起始的字符串定义如下:



USHORT FormatNoDisplay[]={0, 0, ‘/0’};



返回: 正确为0, 其他为第4节定义的错误号;



5050. 设置OSD显示模式(扩展):SetOsdDisplayModeEx ()



数:int SetOsdDisplayModeEx (HANDLE hChannelHandle, int Brightness,



数:HANDLE hChannelHandle 通道



int Brightness OSD显示亮度,255最亮





BOOL Translucent OSD图象是否做半透明处理;

int



Bit 16-23



Bit 24-31: 水平放大倍数



int nLineCount OSD显示的行



USHORT **Format 多行OSD字符串显示



加的位置和次序的格式串, 其中每一行的第一元素X和第二元素Y 是



IF图象的起始位置,X必须是16的倍数,Y可以在图象高度内取值即(0-575)PAL 、

(0-479)NTSC;可以是AS



固定的时间定义值,其值如下:



_



EAR2 两位的年显示,如02





D_MONTH3 英文的月显示,如 Jan



_D_MONTH2 两位阿拉伯数字的月显示,如07



两位的阿拉伯数字的日显示,如31



K3 英文的星期显示,如Tue



EK1 中文的星期显示,如星期二



TE 两位分钟的显示



ND 两位秒的显示



式字符串的每一行最后一个元素必须以NULL(0)





返回: 正确为0, 其他为第4节定义的错误号;



明:



 
试试 SetOsdDisplayMode(chanl,255, true,1, @Format1[0], @Format2[0]);
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
453
import
I
I
回复
0
查看
724
import
I
后退
顶部