Entwickler-Ecke

Multimedia / Grafik - Auflösungen der WebCam auslesen


bbfan - Mi 20.10.10 11:20
Titel: Auflösungen der WebCam auslesen
Hallo Leute,

ich bin von D7 auf D2009 gewechselt. Jetzt funktioniert die alte TVideoCapture vcap.pas nicht mehr.
Leider konnte ich keine Alternative dafür finden.

Ziel: Einfaches auslesen der Bildauflösungen einer WebCam

vg


elundril - Mi 20.10.10 11:37

Warum funktioniert sie nicht mehr? Fehlermeldung irgendwelcher Art oder dreht sich die Unit einfach um und schläft weiter wenn du sie ansprichst?

lg elundil


bbfan - Mi 20.10.10 15:19

Also die vcap.pas greift auf die DirectDraw.pas zu.

Diese produziert eine Menge Fehler.
Fehler 1: "IdirectdrawSurface benötigt Finalization - nicht im Variant Record erlaubt"


Delphi-Quelltext
1:
 lpDDSZBufferDest            : PDirectDrawSurface;                    


PDirectDrawSurface ist ein IDirectDrawSurface.
Eigentlich sollte es hiermit umgangen werden, scheint aber nicht zu klappen unter D2009


Delphi-Quelltext
1:
2:
3:
4:
5:
{$IFDEF COMPILER5_UP}
  PDirectDrawSurface = Pointer;
{$ELSE}
  PDirectDrawSurface = IDirectDrawSurface;
{$ENDIF}


bbfan - Mi 20.10.10 15:59

Gut ich bin jetzt einen Schritt weiter und in der dxcommon.pas angelangt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function IsNTandDelphiRunning : boolean;
var
  OSVersion  : TOSVersionInfo;
  AppName    : array[0..255of char;
begin
  OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
  GetVersionEx(OSVersion);
  // Not running in NT or program is not Delphi itself ?
  AppName[0] := #0;
  lstrcat(AppName, PChar(ParamStr(0)));  // ParamStr(0) = Application.ExeName
  CharUpperBuff(AppName, SizeOf(AppName));
  result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
              (Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE') + 1) );
end;

In der Zeile die fett gedruckt ist kommt beim Starten der Anwendung zu einer kernel Schutzverletzung.
Kompilieren klappt jetzt wieder.


Moderiert von user profile iconMartok: [b]-Tag durch highlight ersetzt


bbfan - Mi 20.10.10 16:30

Ich habe das angegebene wie folgt umschifft:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function IsNTandDelphiRunning : boolean;
var
  OSVersion  : TOSVersionInfo;
  AppName    : array[0..255of char;
  ProgName:String;
begin
  OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
  GetVersionEx(OSVersion);
  // Not running in NT or program is not Delphi itself ?
  AppName[0] := #0;
  lstrcat(AppName, PChar(ParamStr(0)));  // ParamStr(0) = Application.ExeName
//  AnsiUpperCase(AppName, SizeOf(AppName));
  ProgName:=AnsiUpperCase(AppName);
  result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
              (Pos('DELPHI32.EXE', ProgName) = Length(ProgName) - Length('DELPHI32.EXE')) );
end;


Wobei der pos Vergleich mit delph32.exe für mich keinen Sinn macht, denn ParamStr(0) enthält meinen EXE Namen. Dann müsste ich also
einen delphi32.exe kompilieren. Was soll diese komische 2. Bedingung, die NIE erfüllt sein wird.