4
votes

WIA 2 on Windows 7 doesn't detect my camera while WIA 1 on Windows XP detects it.

I try to run my program as admin.

My camera is :

Asus usb2 webcam.

Delphi return the message:

(like this) not available any wia devices from specified type

or

Access Violation at address ...... in module ......

I use this code:

procedure TForm1.Button9Click(Sender: TObject);
Const
   wiaFormatBMP ='{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}';
var
   CommonDlg: ICommonDialog;
   AImage: IImageFile;
   ImagePath: String;
   DeviceManager1 :iDeviceManager;
begin
   CommonDlg := createOleObject('WIA.CommonDialog') as ICommonDialog;
   DeviceManager1 := createOleObject('WIA.DeviceManager') as  iDeviceManager;
   edit1.Text:=  inttostr( DeviceManager1.DeviceInfos.Count);
   AImage := CommonDlg.ShowAcquireImage(UnspecifiedDeviceType,UnspecifiedIntent,
                                        MaximizeQuality,wiaFormatBMP,true,False,True);
   ImagePath := 'C:\temp\test.bmp';
   AImage.SaveFile(ImagePath);
end;
1
in this lin <edit1.Text:= inttostr( DeviceManager1.DeviceInfos.Count); > return 0 - Ahmad
and in this line AImage := CommonDlg.ShowAcquireImage(UnspecifiedDeviceType,UnspecifiedIntent, MaximizeQuality,wiaFormatBMP,true,False,True); return message :not available any wia devices from specified type - Ahmad
Have you checked if your camera is present and enabled in the Control Panel / Device Manager / Imaging devices ? I could simulate what you've described (without the access violation though), it's (obviously :-) enough to disable all imaging devices. About the AV, it's always better to add at least a check like this if not VarIsEmpty(Variable) then Variable.DoSomething before you access the late binded interface variable (it might be undefined or in some erroneous state). - TLama
thank you TLama this device is present and enabled , the win xp is run on VMW (virtual machine) at same computer as win 7 that means the device is Works well , no variables in this sentence just constants : CommonDlg.ShowAcquireImage(UnspecifiedDeviceType ,UnspecifiedIntent, MaximizeQuality , wiaFormatBMP , true , False , True); 1-UnspecifiedDeviceType or cameraDeviceType or ScannerDeviceType 2-UnspecifiedIntent or ColorIntent or ... 3-MaximizeQuality or MinimizeSize 4-wiaFormatBMP 5-true =AlwaysSelectDevice 6-false = use user interface 7- true = cancel error - Ahmad
in Shared Samples of msdn just add CommonDialog and DeviceManager from toolbox but in delphi it is not existing so i create it by ** ::: CommonDlg := createOleObject('WIA.CommonDialog') as ICommonDialog;::: ** ** :::DeviceManager1 := createOleObject('WIA.DeviceManager') as iDeviceManager;:::** then i try this :::CommonDlg.ShowSelectDevice(UnspecifiedDeviceType,true,true);:::: but it is dont work - Ahmad

1 Answers

-1
votes

I recently had a similar experience with WIA and Win7.

What I eventually ended up using was a DirectX solution.

Delphi Basics - DirectX webcam capture

I don't remember how I originally found this project, but under Win7 it just works even with older webcams that I found lying around the office.

I recommend you look at Demo3 in the download file as that had the best, simple, example of what I needed. YMMV.

(Edit) My WIA problem extended from the fact that the webcam maker did not support WIA or Twain under Win7.