📄 unit1.pas
字号:
// 当用户不再需要大帧存时释放大帧存,这可通过请求0幅帧存来将上一次申请的释放
// 用户也可不这样做,因为SDK会在设备关闭时回收用户申请的大帧存
procedure TForm1.OnFree(Sender: TObject);
Var pAddress : POINTER;
begin
MV_AllocSequenceFrameMemory( m_hDev[m_Current], 0, 0, BEFORE_PROCESS );
MV_GetLastError( TRUE );
// 得到大帧存中第25帧的起始地址, 这里仅做演示不干任何
// pAddress := MV_GetSequenceFrameAddress( m_Handle, 25 );
end;
// 用户发出启动命令
procedure TForm1.OnStrat(Sender: TObject);
begin
MV_StartSequenceCapture( m_hDev[m_Current], @SaveCallBack, @Form1 );
MV_GetLastError( TRUE );
end;
// 用户可在任意时刻放弃先前发出的启动命令
procedure TForm1.OnStop(Sender: TObject);
begin
MV_StopSequenceCapture( m_hDev[m_Current] );
MV_GetLastError( TRUE );
end;
///////////////////////////////////////////////////////////////////////////////////////////////
// 下面是对板卡的参数设置, 通过弹出菜单进行选择 //
///////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y:Integer);
VAR Org : TPoint;
begin
if Button <> mbRight Then Exit;
Org := ClientOrigin;
PopupMenu1.Popup( (X + Org.X), (Y + Org.Y) );
end;
// 控制板卡使用的缓存类型
procedure TForm1.OnBuffer(Sender: TObject);
Var Buf_Type : Integer;
begin
if Sender = SystemMemory_DX Then Buf_Type := SYSTEM_MEMORY_DX
else if Sender = SystemMemory_GDI Then Buf_Type := SYSTEM_MEMORY_GDI
else if Sender = VideoMemory Then Buf_Type := VIDEO_MEMORY
else if Sender = Recede_Noise Then Buf_Type := RECEDE_NOISES;
MV_SetDeviceParameter( m_hDev[m_Current], BUFFERTYPE, Buf_Type );
MV_GetLastError( TRUE );
end;
// 控制系统的显示工作状态
procedure TForm1.OnDisplay(Sender: TObject);
Var DisplayOper : Integer;
begin
if Sender = DisplayOpen Then DisplayOper := SHOW_OPEN
else if Sender = DisplayClose Then DisplayOper := SHOW_CLOSE;
MV_SetDeviceParameter( m_hDev[m_Current], DISP_PRESENCE, DisplayOper );
MV_GetLastError( TRUE );
end;
// 控制视频采集标准
procedure TForm1.OnStander(Sender: TObject);
Var Temp : Integer;
begin
if Sender = PAL1 Then Temp := SIGNAL_PAL
else if Sender = NTSC1 Then Temp := SIGNAL_NTSC
else if Sender = NoStander Then Temp := SIGNAL_NONSTANDARD;
MV_SetDeviceParameter( m_hDev[m_Current], ADJUST_STANDARD, Temp );
MV_GetLastError( TRUE );
end;
// 控制视频信号的输入源
procedure TForm1.OnSource(Sender: TObject);
Var Temp : Integer;
begin
if Sender = COMPOSITE Then Temp := COMPOSITE_IN
else if Sender = SVIDEO Then Temp := SVIDEO_IN;
MV_SetDeviceParameter( m_hDev[m_Current], ADJUST_SOURCE, Temp );
MV_GetLastError( TRUE );
end;
// 控制视频信号输入源的通道
procedure TForm1.OnChannel(Sender: TObject);
Var Temp : Integer;
begin
if Sender = Channel0 Then Temp := CHANNEL_0
else if Sender = Channel1 Then Temp := CHANNEL_1
else if Sender = Channel2 Then Temp := CHANNEL_2
else if Sender = Channel3 Then Temp := CHANNEL_3
else if Sender = Channel4 Then Temp := CHANNEL_4
else if Sender = Channel5 Then Temp := CHANNEL_5
else if Sender = Channel6 Then Temp := CHANNEL_6
else if Sender = Channel7 Then Temp := CHANNEL_7
else if Sender = Channel8 Then Temp := CHANNEL_8
else if Sender = Channel9 Then Temp := CHANNEL_9;
MV_SetDeviceParameter( m_hDev[m_Current], ADJUST_CHANNEL, Temp );
MV_GetLastError( TRUE );
end;
// 控制视频捕获的格式
procedure TForm1.OnFormat(Sender: TObject);
Var Temp : Integer;
begin
if Sender = MONOCHOY8 Then Temp := DATA_MONOCHOY8
else if Sender = RGB1555 Then Temp := DATA_RGB1555
else if Sender = CO_RGB24 Then Temp := DATA_CO_RGB24
else if Sender = aRGB8888 Then Temp := DATA_aRGB8888
else if Sender = RGB8332 Then Temp := DATA_RGB8332
else if Sender = CO_RGB565 Then Temp := DATA_CO_RGB565
else if Sender = RGB5515 Then Temp := DATA_RGB5515
else if Sender = CO_YUV444 Then Temp := DATA_CO_YUV444
else if Sender = CO_YUV422 Then Temp := DATA_CO_YUV422
else if Sender = YUV411 Then Temp := DATA_YUV411;
MV_SetDeviceParameter( m_hDev[m_Current], GARB_BITDESCRIBE, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的左右翻转工作
procedure TForm1.OnFlip(Sender: TObject);
Var Temp : Integer;
begin
if Sender = Filp_Yes Then Temp := TURN
else if Sender = Filp_NO Then Temp := NON_TURN;
MV_SetDeviceParameter( m_hDev[m_Current], WORK_FLIP, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的上下翻转工作
procedure TForm1.OnUpDown(Sender: TObject);
Var Temp : Integer;
begin
if Sender = UpDown_Yes Then Temp := TURN
else if Sender = UpDown_NO Then Temp := NON_TURN;
MV_SetDeviceParameter( m_hDev[m_Current], WORK_UPDOWN, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的跳行采集工作
procedure TForm1.OnSkip(Sender: TObject);
Var Temp : Integer;
begin
if Sender = Skip_Yes Then Temp := INTERLUDE // 奇偶场穿插方式采集存储
else if Sender = Skip_No Then Temp := FLATNESS; // 奇偶场平坦方式采集存储
MV_SetDeviceParameter( m_hDev[m_Current], WORK_SKIP, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的同步信号的来源
procedure TForm1.OnSynMode(Sender: TObject);
Var Temp : Integer;
begin
if Sender = SYNRED Then Temp := SYN_RED
else if Sender = SYNGREEN Then Temp := SYN_GREEN
else if Sender = SYNBLUE Then Temp := SYN_BLUE
else if Sender = SYNOUTSIDE Then Temp := SYN_OUTSIDE
else if Sender = SYNSEPARATE Then Temp := SYN_SEPARATE
else if Sender = SYNINSIDE1 Then Temp := SYN_INSIDE1
else if Sender = SYNINSIDE2 Then Temp := SYN_INSIDE2;
MV_SetDeviceParameter( m_hDev[m_Current], WORK_SYNC, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的信号种类
procedure TForm1.OnZGH(Sender: TObject);
Var Temp : Integer;
begin
if Sender = GEHANG Then Temp := LINE_BY_LINE // 逐行
else if Sender = huHang Then Temp := INTERLEAVED; // 隔行
MV_SetDeviceParameter( m_hDev[m_Current], WORK_INTERLACE, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡在采集信号时对灰度级的范围
procedure TForm1.OnBlack(Sender: TObject);
Var Temp : Integer;
begin
if Sender = BOGUSCOLOR Then Temp := BOGUS_COLOR
else if Sender = FULLCOLOR Then Temp := FULL_COLOR;
MV_SetDeviceParameter( m_hDev[m_Current], WORK_ISBLACK, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡在采集信号时场或按帧采集
procedure TForm1.OnFieldFrame(Sender: TObject);
Var Temp : Integer;
begin
if Sender = Field Then Temp := COLLECTION_FIELD
else if Sender = Frame Then Temp := COLLECTION_FRAME;
MV_SetDeviceParameter( m_hDev[m_Current], WORK_FIELD, Temp );
MV_GetLastError( TRUE );
end;
// 控制板卡的OSD模式
procedure TForm1.OnOSD(Sender: TObject);
Var Temp : Integer;
begin
if Sender = MaskBit Then Begin Form3.m_DeviceHandle := m_hDev[m_Current];
Form3.Show; // 窗体Form3为一个OSD位模板,你可以加任意图像到该模板
// 对模板点击后将会该模板的屏蔽位得到并发送到设备;
Exit;
End
else if Sender = NoOSD Then Temp := OSD_NON
else if Sender = OSD_0 Then Temp := OSD_ZERO
else if Sender = OSD_1 Then Temp := OSD_ONE;
MV_SetMaskFunction( m_hDev[m_Current], Temp ); // 或用MV_SetDeviceParameter(m_Handle,OSD_MODE,Temp)完成同样功能
MV_GetLastError( TRUE );
end;
procedure TForm1.COMPRESSClick(Sender: TObject);
Var info: TMV_IMAGEINFO;
i : UINT;
AviFileName : String;
bOpen : boolean;
val :integer;
avisi : TAVICOMPRESSOPTIONS;
begin
{ if bCompress = FALSE then begin
MV_AVIFileInit(541215044, 25);
MV_SetDeviceParameter( m_hDev[m_Current], SET_GARBIMAGEINFO, DWORD(@info) ); // 得到当前的图像的信息
m_pImageInfo := AllocMem(sizeof( BITMAPINFO ) +(256 * sizeof( RGBQUAD )) );
if m_pImageInfo = NIL Then
Exit ;
m_pImageInfo.bmiHeader.biSize := sizeof( BITMAPINFOHEADER );
m_pImageInfo.bmiHeader.biWidth := info.Width;
m_pImageInfo.bmiHeader.biHeight := info.Heigth;
m_pImageInfo.bmiHeader.biPlanes := 1;
m_pImageInfo.bmiHeader.biBitCount := info.nColor;
m_pImageInfo.bmiHeader.biCompression := BI_RGB;
m_pImageInfo.bmiHeader.biSizeImage := info.Length;
m_pImageInfo.bmiHeader.biXPelsPerMeter := 0;
m_pImageInfo.bmiHeader.biYPelsPerMeter := 0;
if info.nColor <=8 Then begin
m_pImageInfo.bmiHeader.biClrUsed := 256;
m_pImageInfo.bmiHeader.biClrImportant := 256;
end
else if info.nColor >8 Then begin
m_pImageInfo.bmiHeader.biClrUsed := 0;
m_pImageInfo.bmiHeader.biClrImportant := 0;
end;
if info.nColor = 8 Then begin
for i := 0 to 255 do
m_pImageInfo.bmiColors[i].rgbBlue := BYTE(0);
m_pImageInfo.bmiColors[i].rgbGreen := BYTE(0);
m_pImageInfo.bmiColors[i].rgbRed := BYTE(i);
m_pImageInfo.bmiColors[i].rgbReserved := 0;
end;
AviFileName := 'Capture.avi';
if IsSave = FALSE THEN begin
bOpen := MV_AVIFileOpen(0, pchar(AviFileName), m_pImageInfo, 1, true, @avisi);
a1 := avisi.fccHandler;
a2 := avisi.cbParms;
a3 := avisi.dwQuality;
a4 := avisi.dwBytesPerSecond;
a5 := avisi.lpParms;
IsSave := TRUE;
end
else if IsSave = TRUE then begin
avisi.cbParms := a2;
avisi.fccHandler := a1;
avisi.dwBytesPerSecond := a4;
avisi.dwQuality := a3;
avisi.lpParms := a5;
bOpen := MV_AVIFileOpen(0, pchar(AviFileName), m_pImageInfo, 1, false, @avisi);
end;
if bOpen = TRUE then begin
MV_SetDeviceParameter( m_hDev[m_Current], WORK_UPDOWN, 1 );
MV_SetDeviceParameter( m_hDev[m_Current], DISP_FLIP, 1 );
COMPRESS.Caption := '停止压缩';
bCompress :=TRUE;
end
else if bOpen = FALSE then begin
bCompress :=FALSE;
MV_AVIFileFini();
end;
end
else if bCompress = TRUE then begin
COMPRESS.Caption := '压缩存储';
MV_SetDeviceParameter( m_hDev[m_Current], WORK_UPDOWN, 0 );
MV_SetDeviceParameter( m_hDev[m_Current], DISP_FLIP, 0 );
bCompress := FALSE;
Sleep(100);
MV_AVIFileFini();
end; }
end;
procedure TForm1.N1Click(Sender: TObject);
var
g_pGDI:PGDIOPERATION;
val:INTEGER;
str: String;
index: ULONG;
xPos: ULONG;
yPos: ULONG;
stype,width : ULONG;
crColor: COLORREF;
nGraphType: ULONG;
ppos : array[0..1]of TPoint;
begin
g_pGDI := AllocMem(sizeof(PGDIOPERATION));
str:='南门 ';
// val := MV_GetDeviceParameter(m_hDev[m_Current],GET_BOARD_TYPE);
// MV_GetDeviceParameter( m_hDev[m_Current],GET_GRAPHICAL_INTERFACE) ;
g_pGDI := PGDIOPERATION(MV_GetDeviceParameter(m_hDev[m_Current],GET_GRAPHICAL_INTERFACE)) ;
MV_GetLastError( TRUE );
//g_pGDI := PGDIOPERATION(val);
xPos:=5;
yPos:=10;
index:=2;
// g_pGDI.SetGDITextFormat( g_pGDI, NIL, NIL, NIL );
g_pGDI.SetGDIText( g_pGDI, PUCHAR(str), @index, NIL );
g_pGDI.SetGDITextColor( g_pGDI, @crColor, NIL, NIL );
g_pGDI.SetGDITextPosition( g_pGDI, @xPos, @yPos,@index);
xPos:=40;
yPos:=10;
index:=1;
g_pGDI.SetGDIText( g_pGDI, PUCHAR(str), @index, NIL );
g_pGDI.SetGDITextColor( g_pGDI, @crColor, NIL, NIL );
g_pGDI.SetGDITextPosition( g_pGDI, @xPos, @yPos,@index);
xPos:=40;
yPos:=160;
index:=0;
g_pGDI.SetGDIText( g_pGDI, PUCHAR(str), @index, NIL );
g_pGDI.SetGDITextColor( g_pGDI, @crColor, NIL, NIL );
g_pGDI.SetGDITextPosition( g_pGDI, @xPos, @yPos,@index);
nGraphType :=0;
ppos[0].x := 300;
ppos[0].y := 100;
ppos[1].x := 300;
ppos[1].y := 500;
index := 5;
g_pGDI.SetGDIGraph( g_pGDI,@nGraphType, @ppos, @index); //画一条直线,Pos决定其位置
nGraphType :=0;
ppos[0].x := 100;
ppos[0].y := 400;
ppos[1].x := 400;
ppos[1].y := 400;
index := 6;
g_pGDI.SetGDIGraph( g_pGDI,@nGraphType, @ppos, @index); //画一条直线,Pos决定其位置
end;
procedure TForm1.N2Click(Sender: TObject);
begin
IsSave := FALSE;
end;
procedure TForm1.StartaviClick(Sender: TObject);
var
strname : string;
begin
strname := 'capture' + inttostr(ii)+'.avi';
ii := ii+1;
IsSave := faceini.ReadBool('mvavi', 'IsSave', FALSE);
Form4.a1 := Strtoint(faceIni.ReadString('mvavi', 'fccHandler', ''));
Form4.Staravi(strname);
end;
procedure TForm1.cancelsaveClick(Sender: TObject);
begin
Form4.EndAVI();
end;
procedure TForm1.ChooseaviClick(Sender: TObject);
begin
Form4.ChooseAVI();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -