IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Capture image webcam pb en mode débug


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 444
    Par défaut Capture image webcam pb en mode débug
    Je cherche à récupérer les photos d'une webcam.
    Je suis sous Delphi 11.3 Community et W10 avec une appli VCL 32 bits.
    J'utilise l'API avicap32.dll, en me basant entre autre sur un exemple donné par cincap.

    Lorsque je lance l’exécution à partir de l'EDI, ma fenêtre principale s'ouvre et j'obtiens une image noire, la webcam ne s'active pas.
    Si je lance l'exe hors de l'EDI, j'ai au départ une fenêtre qui me propose de choisir la webcam dans une liste et ensuite la fenêtre de mon appli s'ouvre et j'ai une image de la webcam.

    Source de l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    unit Unit2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
     
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
       Form2: TForm2;
       Bmp1, Bmp2: TBitmap;
       HCam: hwnd;
       Num, NbMouvement: Integer;
       Debut: Boolean;
       MaxSensi: Integer;
       image: Integer;
    //   Formats: Tformats;
       enregistrement: Boolean;
    Function capCreateCaptureWindowA(lpszWindowName: String; dwStyle: Integer;
      X: Integer; Y: Integer; nWidth: Integer; nHeight: Integer; hwndParent: hwnd;
      nID: Integer): Integer; stdcall; external 'C:\windows\system32\avicap32.dll';
     
    implementation
     
    {$R *.dfm}
    const
     WM_CAP_START = 1024;
     WM_CAP_DRIVER_CONNECT  = 1034;          //pour savoir si la webcam est connecté
     WM_CAP_GRAB_FRAME =1084;              //pour povoir previsualiser la webcam
     WM_CAP_EDIT_COPY =1054;               //pour copier l//image de la webcam, mais ici ca ne marche pas car on affiche un prwiev de la webcam grace a u copier coller (si vous trouvez autre chose pour le preview ca marche super)
     WM_CAP_DRIVER_DISCONNECT = 1035;               //pour savoir si la webcam est pas connectée
     WM_CAP_SEQUENCE = 1086;                        //pour la capture AVI
     WM_CAP_GET_SEQUENCE_SETUP = 1089;              //sais pas
     WM_CAP_SET_SEQUENCE_SETUP = 1088;              //sais pas
     WM_CAP_FILE_SET_CAPTURE_FILE = 1044;           //pour changer le chemin de destination du fichier AVI
     WM_CAP_DLG_VIDEOSOURCE = 1066;                 //pour afficher les parametre
     WM_CAP_FILE_SAVEAS = 1047;                     //pour enregistrer dans un fichier specifier
     WM_CAP_STOP = 1092;                            //pour arreter la capture
     
    procedure TForm2.FormCreate(Sender: TObject);
    var retour : Integer;
    begin
         HCam := capCreateCaptureWindowA('', WS_CHILD or WS_VISIBLE, 2, 2, Panel1.Width-4, Panel1.Height-4,Panel1.handle, 0);
         retour:=sendmessage(HCam, WM_CAP_DRIVER_CONNECT, 0, 0); //fOK = SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L);
         sendmessage(HCam, WM_CAP_START, 0, 0);
    end;
     
    end.
    Pourquoi je ne peux pas fonctionner en débogage ? Y-a-t-il une solution ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Le fait que la camera soit lancée à partir du OnFormCreate doit certainement être un problème, qu'il y ait une fenêtre cachée n'est pas à exclure.

    Je proposerait de lancer les deux sendmessage ailleurs à minima dans le onActivate (de surcroit en testant la valeur HCam) .
    Plus facilement pour le debug je mettrais un bouton qui aurait tout le process du OnCreate.
    Mais, je m'interroge, pourquoi passer par l'API ou plutôt par VCL (sauf pour apprendre l'utilisation des API) alors qu'avec FMX cela devient "un jeu d'enfant"

    2 boutons, un TcameraComponent et un Timage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    unit CameraUnit;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Media,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.Objects;
    
    type
      TForm1 = class(TForm)
        CameraComponent1: TCameraComponent;
        Image1: TImage;
        Layout1: TLayout;
        btnStart: TButton;
        btnStop: TButton;
        procedure CameraComponent1SampleBufferReady(Sender: TObject;
          const ATime: TMediaTime);
        procedure btnStartClick(Sender: TObject);
        procedure btnStopClick(Sender: TObject);
      private
        { Déclarations privées }
        procedure DisplayCameraPreviewFrame;
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.btnStartClick(Sender: TObject);
    begin
    CameraComponent1.Active:=true;
    end;
    
    procedure TForm1.btnStopClick(Sender: TObject);
    begin
    CameraComponent1.Active:=false;
    end;
    // tout le "truc" c'est ici, honteusement pomper à partir des démos :oops:
    procedure TForm1.CameraComponent1SampleBufferReady(Sender: TObject;
      const ATime: TMediaTime);
    begin
     TThread.Synchronize(TThread.CurrentThread, DisplayCameraPreviewFrame);
    end;
    
    procedure TForm1.DisplayCameraPreviewFrame;
    begin 
      CameraComponent1.SampleBufferToBitmap(image1.Bitmap, True);
    end;
    
    end.
    NB. ce n'est pas parce que les demos se trouvent dans Object Pascal/Mobile Snippets que cela ne fonctionne pas pour Windows
    (voir les deux applications demos dans https://github.com/Embarcadero/RADSt...le%20Snippets/)

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 444
    Par défaut
    Bonjour Sergio,

    Pourquoi ne pas passer par FMX : cette appli doit en final s'intégrer à une application VCL existante et assez conséquente (pour moi).
    Je vais sortir l'activation de la webcam de la fenêtre de démarrage pour voir si cela change quelque chose.
    Je vais aussi aller voir les démos je n'y pense jamais.
    J'avais aussi testé il y a quelque temps le mélange VCL FMX qui avait l'air de fonctionner, peut être une piste à suivre ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Il y a peu, j'avais répondu à cet appel https://www.developpez.net/forums/d2...-mixe-vcl-fmx/ donc oui, ce devrait fonctionner

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 444
    Par défaut
    C'est bien cette discussion qui avait éveillé ma curiosité.

Discussions similaires

  1. [AC-2010] Capture image webcam
    Par renard700 dans le forum VBA Access
    Réponses: 4
    Dernier message: 10/12/2019, 08h39
  2. [Débutant] Capture image webcam
    Par janyoura dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/07/2013, 12h30
  3. Capturer image webcam + code QR
    Par hugo7 dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2011, 08h10
  4. Handler capture image webcam
    Par silberfab dans le forum Silverlight
    Réponses: 3
    Dernier message: 17/09/2010, 14h11
  5. Capturer une image WebCam?
    Par gui38 dans le forum Flex
    Réponses: 2
    Dernier message: 22/08/2007, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo