⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 威视V130采集卡开发包:包含了源代码、可执行文件和Demo
💻 PAS
📖 第 1 页 / 共 2 页
字号:
// 当用户不再需要大帧存时释放大帧存,这可通过请求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 + -