小弟使用 DSPACK2 控件进行基于DirectX(DirectShow)的开发,不知如何更改数码相机的属性设置。请给出 DSPACK2 的方案或 DirectX 的方案。
   比如:
      更改视频窗口的大小。默认为:160*120 如何改为:640*480
      可以通过程序调整视频窗口中图像的亮度、色度、对比度等。
            
       在线等待,帮忙 UP 者有分。
   小弟这厢有礼!

解决方案 »

  1.   

    难道真的没人知道吗?程序如下在Win98下运行,对于 PIN 及PIN 接口无法完成设置和显示其列表对于调整视频窗口中图像的亮度、色度、对比度等调整不稳定,请高手帮助!unit Editor;
    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;
      

  2.   

    //==============================================================================
    //
    //==============================================================================
    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.
      

  3.   

    to: xaocao (小草)  
    您好!我现在也在做这方面的东西!请把DSPACK2控件发给我好吗?
    [email protected]
      

  4.   

    guolinchao(潮) :
       资料己发,请查收!
      

  5.   

    也给我一份吧。
    [email protected]
      

  6.   

    也给我一份吧。
    [email protected]