小弟使用 DSPACK2 控件进行基于DirectX(DirectShow)的开发,不知如何更改数码相机的属性设置。请给出 DSPACK2 的方案或 DirectX 的方案。
比如:
更改视频窗口的大小。默认为:160*120 如何改为:640*480
可以通过程序调整视频窗口中图像的亮度、色度、对比度等。
在线等待,帮忙 UP 者有分。
小弟这厢有礼!
比如:
更改视频窗口的大小。默认为:160*120 如何改为:640*480
可以通过程序调整视频窗口中图像的亮度、色度、对比度等。
在线等待,帮忙 UP 者有分。
小弟这厢有礼!
解决方案 »
- 请问有没有其它树形列表的控件(除了TVirtualStringTree)
- Delphi 调试,能记录程序的执行路径吗?
- 如何获得硬盘序列号?问题始终没人回答
- 请问代码错误原因!
- 怎样在Dephi中打开存储在ACCESS中数据类型为OLE的数据.
- select count(1) from table1 这句话什么意思?
- 瑞星升到13.x后,关机、重启的api函数不好用了,是级别低么?应怎样改?
- 1.哪有图标啊?我想要像工具栏上的剪切,复制等那样的系统图标怎么找啊?
- 倾囊而出,Delphi5中ListView的LargeImages问题
- 请教!如何编程序得到本机拨号上网的ip地址(本机在局域网内,有一个ip地址,不是这个)
- DirectShow视频捕捉与网络播放视频
- 我今天有病!!!!!!!!!!!
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DirectShow, DSUtil, DSPack, StdCtrls, ComCtrls,CapWindow;type
TFormEditor = class(TForm)
PageControl1: TPageControl;
Selector: TTabSheet;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
cbCategories: TComboBox;
Interfaces: TListBox;
Pins: TTabSheet;
Label4: TLabel;
Label5: TLabel;
lbFilters:TListBox;
lbPins: TListBox;
PinInterfaces: TListBox;
MediaTypes: TListBox;
PopupMenu: TPopupMenu;
PropertyPage: TMenuItem;
VFWCapture: TMenuItem;
VFWFormat: TMenuItem;
VFWSource: TMenuItem;
VFWDisplay: TMenuItem;
VFWConfig: TMenuItem;
Config1: TMenuItem;
VFWAbout: TMenuItem;
PinMenu: TPopupMenu;
PinProperty: TMenuItem; procedure cbCategoriesChange(Sender: TObject);
procedure lbFiltersClick(Sender: TObject);
procedure InterfacesDblClick(Sender: TObject);
procedure lbPinsClick(Sender: TObject);
procedure PinInterfacesDblClick(Sender: TObject);
procedure PopupMenuPopup(Sender: TObject);
procedure PinMenuPopup(Sender: TObject);
procedure OnShow(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure PropertyPageClick(Sender: TObject);
procedure VFWDisplayClick(Sender: TObject);
procedure VFWFormatClick(Sender: TObject);
procedure VFWSourceClick(Sender: TObject);
procedure Config1Click(Sender: TObject);
procedure VFWAboutClick(Sender: TObject);
procedure PinPropertyClick(Sender: TObject);
procedure Pinsshow(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
procedure FindFilterInterfaces; end; TDSitf = record
name : string;
itf : TGUID;
end;var
FormEditor: TFormEditor;
//----------------------------------------------------------------------------
DSItfs : array[0..359] of TDSitf ={ //定义略// }
implementation
uses activex;{$R *.dfm}//==============================================================================
//
//==============================================================================
procedure TFormEditor.cbCategoriesChange(Sender: TObject);
var i: integer;
begin
lbFilters.Clear;
Interfaces.Clear;
CapWindow.SysDev.SelectIndexCategory(cbCategories.ItemIndex);
if CapWindow.SysDev.CountFilters > 0 then
for i := 0 to CapWindow.SysDev.CountFilters - 1 do
lbFilters.Items.Add(CapWindow.SysDev.Filters[i].FriendlyName);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.lbFiltersClick(Sender: TObject);
begin
//---------------------------
Captrue.Filter.BaseFilter.Moniker := CapWindow.SysDev.GetMoniker(lbFilters.ItemIndex);
IFilter(Captrue.Filter).NotifyFilter(foRefresh);
FindFilterInterfaces;
end;//==============================================================================
//
//==============================================================================
procedure TFormEditor.FindFilterInterfaces;
var
i: integer;
unk: IUnknown;
begin
Interfaces.Clear;
if lbFilters.ItemIndex <> -1 then try
with Captrue.Filter.BaseFilter.CreateFilter do for i := 0 to length(DSItfs)-1 do
if Succeeded(QueryInterface(DSItfs[i].itf, unk)) then
Interfaces.Items.Add(DSItfs[i].name);
finally
unk := nil;
end
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.InterfacesDblClick(Sender: TObject);
begin
//---------------------------------------------
if Interfaces.ItemIndex <> -1 then
if Interfaces.Items.Strings[Interfaces.ItemIndex] = 'ISpecifyPropertyPages' then
ShowFilterPropertyPage(self.Handle, Captrue.Filter as IBaseFilter,ppVFWCapSource);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.lbPinsClick(Sender: TObject);
var
i: integer;
unk: IUnknown;
EnumMT : TEnumMediaType;
begin
PinInterfaces.Clear;
if lbPins.ItemIndex <> -1 then
try
with CapWindow.PinList.Items[lbPins.ItemIndex] do for i := 0 to length(DSItfs)-1 do
if Succeeded(QueryInterface(DSItfs[i].itf, unk)) then
PinInterfaces.Items.Add(DSItfs[i].name); finally
unk := nil;
end; MediaTypes.Clear;
if lbPins.ItemIndex <> -1 then
begin
EnumMT:= TEnumMediaType.Create(CapWindow.PinList.Items[lbPins.ItemIndex]);
try
if EnumMT.Count > 0 then
for i := 0 to EnumMT.Count - 1 do
MediaTypes.Items.Add(EnumMt.MediaDescription[i]);
finally
EnumMT.Free;
end;
end;
end;//==============================================================================
//
//==============================================================================
procedure TFormEditor.PinInterfacesDblClick(Sender: TObject);
begin
//-------------------------
if PinInterfaces.ItemIndex <> -1 then
if PinInterfaces.Items.Strings[PinInterfaces.ItemIndex] = 'ISpecifyPropertyPages' then
ShowPinPropertyPage(Self.Handle, CapWindow.PinList.Items[lbPins.ItemIndex]);
end;
//
//==============================================================================
procedure TFormEditor.PopupMenuPopup(Sender: TObject);
begin
PopupMenu.Items.Items[0].Enabled := false;
PopupMenu.Items.Items[1].Items[0].Enabled := false;
PopupMenu.Items.Items[1].Items[1].Enabled := false;
PopupMenu.Items.Items[1].Items[2].Enabled := false;
PopupMenu.Items.Items[2].Items[0].Enabled := false;
PopupMenu.Items.Items[2].Items[1].Enabled := false;
if lbFilters.ItemIndex = -1 then exit;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppDefault) then PopupMenu.Items.Items[0].Enabled := true;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppVFWCapFormat) then PopupMenu.Items.Items[1].Items[0].Enabled := true;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppVFWCapSource) then PopupMenu.Items.Items[1].Items[1].Enabled := true;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppVFWCapDisplay) then PopupMenu.Items.Items[1].Items[2].Enabled := true;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppVFWCompConfig) then PopupMenu.Items.Items[2].Items[0].Enabled := true;
if HaveFilterPropertyPage(Captrue.Filter as IBaseFilter, ppVFWCompAbout) then PopupMenu.Items.Items[2].Items[1].Enabled := true;
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.PinMenuPopup(Sender: TObject);
begin
if lbPins.ItemIndex = -1 then abort;
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.OnShow(Sender: TObject);
var
i, j: integer;
AMoniker, MyMoniker: IMoniker;
PropBag: IPropertyBag;
AVariant: OleVariant;
CLSID: TGUID;
Found: boolean;
begin
for i := 0 to CapWindow.SysDev.CountCategories - 1 do
cbCategories.Items.Add(CapWindow.SysDev.Categories[i].FriendlyName); Found := false;
j := 0;
MyMoniker := Captrue.Filter.BaseFilter.Moniker;
if MyMoniker = nil then exit; if PropBag.Read('CLSID',AVariant,nil) = S_OK then
CLSID := StringToGUID(AVariant)
else CLSID := GUID_NULL; for i := 0 to CapWindow.SysDev.CountCategories - 1 do
begin
CapWindow.SysDev.SelectIndexCategory(i);
if CapWindow.SysDev.CountFilters > 0 then
for j := 0 to CapWindow.SysDev.CountFilters - 1 do
begin
if IsEqualGUID(CLSID, CapWindow.SysDev.Filters[j].CLSID) then
begin
AMoniker := CapWindow.SysDev.GetMoniker(j);
Found := AMoniker.IsEqual(MyMoniker) = S_OK;
AMoniker := nil;
end;
if Found then Break;
end;
if Found then
begin
cbCategories.ItemIndex := i;
cbCategoriesChange(nil);
lbFilters.ItemIndex := j;
lbFiltersClick(nil);
break;
end;
end;
PropBag := nil;
MyMoniker := nil; end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
//Captrue.FilterGraph.ClearGraph;
//Captrue.FilterGraph.Active := false;
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.PinsShow(Sender: TObject);
var
i: integer;
PinInfo: TPin_Info;
BaseF: IBaseFilter;
begin
lbPins.Clear;
PinInterfaces.Clear;
MediaTypes.Clear; if Succeeded(Captrue.Filter.QueryInterface(IBaseFilter, BaseF)) then
begin
CapWindow.PinList.Assign(BaseF);
if PinList.Count > 0 then
for i := 0 to CapWindow.PinList.Count - 1 do
begin
PinInfo := CapWindow.PinList.PinInfo[i];
case PinInfo.dir of
PINDIR_INPUT : lbPins.Items.Add(format('%s (input)',[PinInfo.achName]));
PINDIR_OUTPUT : lbPins.Items.Add(format('%s (output)',[PinInfo.achName]));
end;
PinInfo.pFilter := nil;
end;
BaseF := nil;
end;end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.PropertyPageClick(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppDefault);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.VFWDisplayClick(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppVFWCapDisplay);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.VFWFormatClick(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppVFWCapFormat);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.VFWSourceClick(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppVFWCapSource);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.Config1Click(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppVFWCompConfig);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.VFWAboutClick(Sender: TObject);
begin
ShowFilterPropertyPage(Self.Handle, Captrue.Filter as IBaseFilter, ppVFWCompAbout);
end;
//==============================================================================
//
//==============================================================================
procedure TFormEditor.PinPropertyClick(Sender: TObject);
begin
ShowPinPropertyPage(Self.Handle, PinList.Items[lbPins.ItemIndex]);
end;end.
您好!我现在也在做这方面的东西!请把DSPACK2控件发给我好吗?
[email protected]
资料己发,请查收!
[email protected]
[email protected]