AVICAP32.DLL 用着个抓不到图呀

比特灵 2017-11-23 10:21:43
网上很多很多的帖子,都差不多,但是我试了几个都不能抓图呀,也不能录像,谁有成功过指点下啊,谢谢。。。
...全文
297 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2017-11-24
  • 打赏
  • 举报
回复
比特灵 2017-11-24
  • 打赏
  • 举报
回复
[dcc32 Error] Unit1.pas(50): E2003 Undeclared identifier: 'SampleGrabber'
比特灵 2017-11-24
  • 打赏
  • 举报
回复
多谢LS回复,尝试使用DSPACK,遇到SampleGrabber 未定义的错误,如何解决呢?谢谢
lyhoo163 2017-11-24
  • 打赏
  • 举报
回复
未用过AVICAP32.DLL,建议使用DSPack功能比较多,例子也多。
比特灵 2017-11-24
  • 打赏
  • 举报
回复
上面的问题已经解决,但是忘记怎么解决的了,贴个代码吧:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DSUtil, DirectShow9, DSPack,
  Vcl.StdCtrls, DXSUtil, Vcl.ExtCtrls,
  ComCtrls;

type
  TForm1 = class(TForm)
    FilterGraph1: TFilterGraph;
    VideoWindow1: TVideoWindow;
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Filter1: TFilter;
    SampleGrabber1: TSampleGrabber;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

    function capturescreenrect(arect: trect): tbitmap;
    function captureclientimage(control: tcontrol): tbitmap;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SysDev: TSysDevEnum;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FilterGraph1.ClearGraph;
  FilterGraph1.Active := false;
  // 设filter为所选视频输入设备
  Filter1.BaseFilter.Moniker := SysDev.GetMoniker(ListBox1.ItemIndex);
  FilterGraph1.Active := true;
  // 打开所选的视频输入设备
  with FilterGraph1 as ICaptureGraphBuilder2 do
    // RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter, nil,
    // VideoWindow1 as IBaseFilter);
    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter,
      SampleGrabber1 as IBaseFilter, VideoWindow1 as IBaseFilter);
  // 显示出来
  FilterGraph1.Play;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
  Image1.Refresh;
  Image1.Picture.SaveToFile('d:\temp\test.bmp');
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  SysDev.Free;
  FilterGraph1.ClearGraph;
  FilterGraph1.Active := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  // 读取系统中的视频输入设备
  SysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  if SysDev.CountFilters > 0 then
    for i := 0 to SysDev.CountFilters - 1 do
    begin
      ListBox1.Items.Add(SysDev.Filters[i].FriendlyName)
    end;
end;

end.
JAVA基于局域网的聊天室系统(源代码+论文) 摘 要 视频聊天系统作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的音、视频信息的传递和服务,具有极其广泛的发展前景。 本文介绍了采用JAVA编程开发视频聊天系统的一套比较常用的解决方案。文字聊天采用TCP模式;语音视频聊天采用UDP模式,在客户端之间点对点的进行。在该方案中,通过函数库VFW来实现视频捕获、影像压缩以及影像播放。微软公司提供的专门用于视频捕获开发的工具包VFW,为在Windows操作系统中实现视频捕获提供了标准的接口,从而大大降低了程序的开发难度。在视频传输方面,则通过组建视频帧,将位形式的视频帧压缩成帧格式的Mpeg4流,传输到客户端后,解压并显示影像。同时,在本方案中,采用了线程来实现语音录制和语音回放,最终实现了通过服务器中转的文字聊天、点对点的语音视频聊天。 关键词:文字聊天;VFW;视频捕获;视频传输;语音录制;语音回放 VFW是Microsoft 1992年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,以及在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提供VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。用户不必专门安装VFW,在安装Windows时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等。 VFW主要由以下六个模块组成: (1) AVICAP.DLL:包含了执行视频捕获的函数,它给AVI文件、I/O和视频音频设备驱动程序提供一个高级接口; (2) MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作; (3) MCIAVI.DRV:此驱动程序包括对VFW的MCI命令的解释器; (4) AVIFILE.DLL:支持由标准多媒体I/O(mmio)函数提供的更高的命令来访问AVI文件; (5) 压缩管理器(ICM):管理用于视频压缩/解压缩的编解码器(CODEC); (6) 音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频。 Visual C++在支持VFW方面提供有vfw32.lib、msacm32.lib、winmm.lib等库。特别是它提供了功能强大、简单易行、类似于MCIWnd的窗口类AVICap。AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。 AVICap支持实时的视频流捕获和单帧捕获,并提供对视频源的控制。虽然MCI也提供数字视频服务,比如,它为显示AVI文件的视频提供了AVIVideo命令集,为视频叠加提供了overlay命令集,但这些命令主要是基于文件的操作,不能满足实时地直接从视频缓存中获取数据的要求。对于使用没有视频叠加能力的捕获卡的PC机来说,用MCI提供的命令集是无法捕获视频流的。而AVICap在捕获视频方面具有一定的优势,它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获到文件。 在视频捕获之前需要创建一个捕获窗,所有的捕获操作及其设置都以它为基础。用AVICap窗口类创建的窗口(通过capCreateCaptureWindow函数创建)被称为“捕获窗”,其窗口风格一般为WS_CHILD和WS_VISIBLE。实际上,捕获窗类似于标准控制(如按钮、列表框等)。捕获窗具有下列功能: (1) 将视频流和音频流捕获到一个AVI文件中; (2) 动态地同视频和音频输入器件连接或断开; (3) 以Overlay或Preview模式对输入的视频流进行实时显示; (4) 在捕获时可指定所用的文件名并能将捕获文件的内容拷贝到另一个文件; (5) 设置捕获速率; (6) 显示控制视频源、视频格式、视频压缩的对话框; (7) 创建、保存或载入调色板; (8) 将像和相关的调色板拷贝到剪贴板; (9) 将捕获的一个单帧像保存为DIB格式的文件。 AVICap在显示视频时提供的两种模式: (A)预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视器上显示。 (B)叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过VGA卡,叠加视频的硬件将VGA的输出信号与其自

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧