Q&A

  • VideoCap 의 SetBitMapHeader 설정에대해 질문드립니다.

자료를 검색해보니

원하는 자료가 있어 해보고 있는데 계속 에러가 나오네요

워낙 이해를 잘 못하는지라  너그러히 봐주시고

어디서 잘못 되었는지 좀 짚어주세요 !

<!--CodeS-->
function  Cam_ON(VideoCap:TVideoCap; biWidth_ ,biHeight_ :LongInt):string;
begin
    try
       if VideoCap.DriverOpen then  VideoCap.DriverOpen:=False;
       with VideoCap do begin
               DriverIndex := DriverIndex_;
          VideoFileName := '';
               DriverOpen := True;
            Videopreview := True;
                  CapToFile := false;
       end;
       //Cam_Format(VideoCap, biWidth_ , biHeight_, BI_RGB);
       VideoCap.StartCapture;
    except
       raise Exception.Create('Cam Open Error');
    end;
end;
<!--CodeE-->

<!--CodeS-->
function BIH_GetStride(BIH: TBitmapInfoHeader): Integer;
begin
        Result := BIH.biWidth * BIH.biBitCount div 8;
end;

function BIH_GetSizeImage(BIH: TBitmapInfoHeader): DWORD;
begin
        Result := BIH_GetStride(BIH) * BIH.biHeight * BIH.biPlanes;
end;


Function  Cam_Format(VideoCap:TVideoCap; Width , Height: Integer; biCompression: DWORD) : Boolean;
var  Vheader      : TBitmapInfoHeader;
     SetInfo      : TBitmapInfoHeader;
begin
    while VideoCap.StartCapture do begin
         if VideoCap.StartCapture then
         begin
            //VideoCap.Videopreview := False;
            //VideoCap.CapToFile := True;
            VideoCap.StopCapture;
         end;
         if (VideoCap.StopCapture) and (VideoCap.CapToFile)  then Break;
    end;

    if  VideoCap.StopCapture then
    begin
        //Vheader := VideoCap.BitMapInfoHeader;
        With Vheader do begin
             biSize         := Sizeof(TBITMAPINFOHEADER);
             biWidth        := Width;
             biHeight       := Height;
             biPlanes       := 1;
             biBitCount     := 23;
             biCompression  := biCompression;
             //biSizeImage    := ((biWidth * longint(biBitCount)) div 8) * biHeight;
             //biSizeImage    := BIH_GetSizeImage(Vheader);
             biXPelsPerMeter:= 0;
             biYPelsPerMeter:= 0;
             biClrUsed      := 0;
             biClrImportant := 0;
        end;
    VideoCap.SetBitmapInfo( @Vheader, sizeof( TBitmapInfoHeader ) );
    //capSetVideoFormat(VideoCap.fhcapWnd,@Vheader,sizeof(TBitmapInfoHeader));
    end;
    //VideoCap.Videopreview := True;
    //VideoCap.CapToFile:=False;
    VideoCap.StartCapture;
    Result:= True;
end;

<!--CodeE-->

4  COMMENTS
  • Profile
    박상윤 2007.06.26 22:02
    다른 부분은 시간없어서.. 못봤고...

    biBitCount     := 23;  23은 없구요...

    24일것 같군요.. ^^  8,16,24,32,머.. 대충 이렇거든요..
    한번.. 바꿔보세요..
  • Profile
    최용일 2007.06.26 21:21
    안녕하세요. 최용일입니다.

    코드만 있어서 뭔지 잘 모르겠는데... 어떤 에러가 발생하는지요?

    제가 볼때는 드라이버에서 지원하지 않는 포멧으로 설정하실려고 해서 에러가 발생하는 것 같은데요...

    ^^ 항상 즐코하세요...
  • Profile
    박종삼 2007.06.26 22:43
    지금나오는 문제 메세지는

         Not Supported Frame Format     입니다.


    테스트 사용방식은
    <!--CodeS-->
    procedure TForm1.Rb1Click(Sender: TObject);
    begin
        if Sender =  Rb1 then Cam_Format(VideoCap1, 160 , 120, BI_RGB);
        if Sender =  Rb2 then Cam_Format(VideoCap1, 320 , 240, BI_RGB);
        if Sender =  Rb3 then Cam_Format(VideoCap1, 640 , 480, BI_RGB);
    end;
    <!--CodeE-->



  • Profile
    최용일 2007.06.27 00:48
    안녕하세요. 최용일입니다.

    DlgVFormat이던가 해상도 관련해서 여러가지 설정할 수 있는 다이얼로그를 띄우는 메소드가 있습니다. 이걸 이용해서 원하시는 포멧으로 설정하신후에 비트맵헤더가 어떻게 구성되어 있는가를 확인하세요.

    아무 값이나 넣으면 되는게 아니라 위에서 확인한 대로 비트맵헤더를 구성하시면 됩니다.

    ^^ 항상 즐코하세요...