熟悉DirectShow或者VFW视频截取的朋友过来帮帮忙!!!(200分)

  • 主题发起人 主题发起人 春意
  • 开始时间 开始时间

春意

Unregistered / Unconfirmed
GUEST, unregistred user!
好长时间没来DFW了,对面的老兄还好吗?
这次有急事帮忙,一个软件就剩这个问题没解决了………(时间紧,所以求购程序例子)
要求:DirectShow或者VFW视频捕捉的简单例子
1、不要用10moos或者flyvideo自带的控件,最好是windows中的Api编写
2、能快速调出影像,并能在程序中设置基本配置
3、能够截取图片bmp,如果能MemoryStream转为jpg格式的更好!
4、程序代码不定:Delphi /C++Builder/ VC++都可以
总之,越简单越好!!多谢…………
有例子就请发我的信箱:yanchunyi@163.com 本人不胜感激!
 
使用VFW捕捉图象的一段程序,比较简单,因为我未使用Socket所以
Socket那段在我的程序不使用,仅供参考:
procedure TPos_MainFrm.CAPStatus(Sender: TObject);
begin
Panel6.Color := clBtnFace;
Panel6.Refresh;
end;

procedure TPos_MainFrm.PlayVideo;
var
MyCapStatusProc : TCapStatusProc;
begin

// 开始捕捉视频
CapSetVideoArea( VideoArea );
CapSetInfoLabel( lblVideoInfo);
MyCapStatusProc := CAPStatus;
CapSetStatusProcedure( MyCapStatusProc );
if CapOpenDriver then
begin
CapSetCapSec( 15 * 3 );
CapShow;

end;
end;

procedure TPos_MainFrm.CaptureVideo;
begin
Panel6.Color := clRed;
Panel6.Refresh;
CapSetCapSec( StrToInt(ReadReg('CapTime'))*15);
CapStart;
end;

procedure TPos_MainFrm.StopVideo;
begin
CapStop;
Panel6.Color := clBtnFace;
Panel6.Refresh;
end;

procedure TPos_MainFrm.SaveVideoPicture;
var
SingleImageFIleName:string;

picName:string;
// Mybmp:Tbitmap;
// MyJpg:TJpegImage;
begin

PicName:=FCurrentNO_CUR+'.bmp';
SingleImageFileName :=picSavePath+PicName;

CapSetSingleImageFileName( SingleImageFileName );
CapGrabSingleFrame;
CapSetVideoLive;

// Mybmp:=Tbitmap.Create;
// MyJpg:=TJpegImage.Create;

// Mybmp.LoadFromFile(SingleImageFileName);
// MyJpg.Assign(Mybmp);
// MyJpg.Performance:=JpBestSpeed;

// MyJpg.CompressionQuality:=10;
// MyJpg.Compress;

// MyJpg.SaveToFile(currentNO_Cur+'.jpg');

// MyJpg.Free;
// Mybmp.Free;

TransPictrue(SingleImageFileName);
end;

procedure TPos_MainFrm.TransPictrue(PictureName:string);
var
//S, S1: string;
MyBmp: TBitmap;
Myjpg: TJpegimage;


begin
{ try
MyStream := TMemorystream.Create; //建立内存流
MyBmp := TBitmap.Create;
Myjpg := TJpegimage.Create;
MyBmp.LoadFromFile(pictrueName);
Myjpg.Assign(MyBmp); //将BMP图象转成JPG格式
MyJpg.Performance:=JPBestSpeed;
Myjpg.CompressionQuality := 10; //JPG文件压缩百分比设置,数字越大图像越清晰,但数据也越大
Myjpg.SaveToStream(MyStream); //将JPG图象写入流中
Myjpg.free;
MyStream.Position := 0;
s1 :=inttostr(MyStream.size); //流的大小
Socket1.Socket.SendText(s1); //发送流大小
finally
MyBmp.free;
end;

MyStream.Position := 0;
Socket1.Socket.SendStream(MyStream);//将流发送出去
}
try
MyBmp:=Tbitmap.Create;
Mybmp.LoadFromFile(PictureName);

Myjpg:=TJpegImage.Create;
With MyJpg do
begin
Assign(Mybmp);
//Performance:=JPBestSpeed;
CompressionQuality :=50;
Compress;
SaveTofile(PicSavePath+'/'+FCurrentNO_Cur+'.jpg');
DeleteFile(pictureName);
end;
finally
Mybmp.Free;
Myjpg.Free;
end;

if conn then
CopyFile(Pchar(SourcePath +FCurrentNo_CUR+'.jpg'),Pchar(DestPath+FCurrentNO_Cur+'.jpg'),false)
else
begin
{如果图片没有传送成功,那么在本地存放图片的目录下建立一个文件夹
来存放未传送成功的图片}
if Not DirectoryExists(SourcePath+'未传送图片') then
CreateDir(sourcePath+'未传送图片');
CopyFile(Pchar(SourcePath +FCurrentNo_CUR+'.jpg'),Pchar(SourcePath+'未传送图片/'+FCurrentNO_Cur+'.jpg'),false);

end;
end;
 
捕捉到的图片没有画图。。。请大家继续!
 
Up者也送分…………
 
等了一天,找了很多资料,终于软件中的视频捕捉完成了!
不过总觉得方法不够好,想听听大家的意见……
 
在视频显示及捕捉方面,现大多使用directshow编程,里面有大量例子
 
老兄:
最近在忙什么呀?ZRWeng的回复很有价值!
 
你可以看http://new.playicq.com/dispdocnew.php?id=4218的控件,我的都是用他的了
 
我程序中能够实现,但时间长了,计算机出现黑屏!!
后来了解到应更改模式,将preview改为overply,这样会不占系统资源……

现求overply下视频捕捉!!最好是c++ builder
 
时间太久,散分
 
时间太久,散分
 

Similar threads

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