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

PyQt Python Discussion :

QCameraImageCapture et Buffer


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut QCameraImageCapture et Buffer
    Bonjour,

    j'avais eu un coup de pouce il y a quelque temps par rapport à l'enregistrement d'une image issue d'une camera via l'utilisation de "Qtmultimedia.QCameraImageCapture".
    le code qui m'avait été conseillé était le suivant (et il marche très bien):

    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
    # préparation de la capture
    self.imageCapture = QtMultimedia.QCameraImageCapture(self.camera)
     
    # capture dans un fichier (et non dans un buffer)
    self.imageCapture.setCaptureDestination(QtMultimedia.QCameraImageCapture.CaptureToFile)
     
    # format de l'image à capturer
    imageSettings = QtMultimedia.QImageEncoderSettings()
    imageSettings.setCodec("image/jpeg");
    self.imageCapture.setEncodingSettings(imageSettings)
     
    # capture dans le fichier jpg fourni (avec chemin)
    self.camera.searchAndLock()
    self.imageCapture.capture(r"E:\Pythondev\Pydev3_qt5\python3\PyQt5\QCamera\toto.jpg")
    self.camera.unlock()
    la documentation fait référence à la possibilité d'utiliser à la place de "QtMultimedia.QCameraImageCapture.CaptureToFile" un buffer en utilisant l'appel:
    QtMultimedia.QCameraImageCapture.CaptureToBuffer.

    j'ai récemment appris à utiliser un Buffer pou y charger un fichier déjà existant (sur disque)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            buffer1 = QBuffer()
            buffer1.open(QIODevice.ReadWrite)
            self.image_originale = QImage(self.pixmap)
            self.image_originale.save(buffer1,"jpeg")
            b1 = BytesIO()
            b1.write(buffer1.data())
            b1.seek(0)
    b1 contenant (si j'ai bien compris) l'image contenue dans Le "buffer1".

    Aujourd'hui, j'essaye d'utiliser le "QCameraImageCapture.CaptureToBuffer" mais je n'arrive pas à combiner les deux méthodes ci dessus... est-ce possible ou ce sont deux types de buffer differents?

    merci pour votre aide,

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Il y a ici un exemple qui me semble complet:

    https://github.com/baoboa/pyqt5/tree...widgets/camera

  3. #3
    Invité
    Invité(e)
    Par défaut requestId ?
    Salut,
    merci pour le lien,
    il contient en effet la solution à mon problème.

    j'essaye de comprendre l'ensemble du code pour en extraire la partie qui m'interesse et l'integrer à mon appli...

    j'ai une incompréhension face à la fonction ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        def processCapturedImage(self, requestId, img):
            scaledImage = img.scaled(self.ui.viewfinder.size(), Qt.KeepAspectRatio,Qt.SmoothTransformation)
            self.ui.lastImagePreviewLabel.setPixmap(QPixmap.fromImage(scaledImage))
            self.displayCapturedImage()
            QTimer.singleShot(4000, self.displayViewfinder)
    Si je comprends bien, c'est le "requestId" dans les paramètres de la fonction qui affecte au paramètre "img" le statut d'image.
    mais je ne vois pas où est-ce que ce requestId a été déclaré (et défini) dans le reste du code... Il ne semble pas non plus être un mot réservé...

  4. #4
    Invité
    Invité(e)
    Par défaut QCamera take Image
    Bonjour,
    finalement je m'en suis sorti... il y a finalement tout dans le lien posté plus haut...
    aprés avoir fait quelques exécutions en mode "ligne par ligne" via pdb.set_trace(), j'ai à peu prés réussi à structurer un truc qui tourne et qui répond à ce que je voulais faire.

    bon je comprends pas encore toute les subtilités mais bon il me reste plus qu'à jouer avec le tout.

    merci!

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    processCapturedImage est le slot du signal imageCaptured

    Lorsque l'on exécute une capture avec img_idx = QCameraImageCapture.capture(arg) img_idx est un index qui permettra après coup de savoir à quel shot se rapporte l'image fournie en argument du signal en le comparant à requestId. Ce n'est pas utilisé dans ce code il me semble mais c'est utile pour des captures en différé avec des timers.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. stencil buffer
    Par patapetz dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/02/2004, 17h23
  2. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41
  3. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 08h35
  4. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

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