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

C++ Discussion :

libavcodec et hBitmap


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Par défaut libavcodec et hBitmap
    Bonjour,

    J'aimerais enregistrer une suite de capture écran en vidéo avec libavcodec.
    Pour capturer l'écran, aucun probleme, mais j'obtient un HBitmap en RGB, et libavcodec veut du YUV.
    Comment puis je faire pour convertir mon RGB en YUV sans avoir a utiliser GetPixel qui est très très lent ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Par défaut
    Oui, j'avais deja vu cette page, et j'ai deja essayé cette technique.
    Le probleme est que pour utiliser cette matrice de conversion, j'ai besoin de récuperer le code RGB de chaque pixel, or pour faire ceci je dois donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COLORREF color = GetPixel(hCaptureDC, x, y);
    Le probleme est que cette fonction est très lente, surtout quand faut le faire pour chaque pixel...
    Je ne peux donc pas faire comme ceci...
    J'avais espéré que libavcodec ou swscale de ffmpeg pouvait le faire, mais je n'arrive pas a utiliser la fonction sws_scale avec mon HBitmap récupéré depuis un CreateCompatibleBitmap.

  4. #4
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Citation Envoyé par Kyom Voir le message
    Oui, j'avais deja vu cette page, et j'ai deja essayé cette technique.
    Le probleme est que pour utiliser cette matrice de conversion, j'ai besoin de récuperer le code RGB de chaque pixel, or pour faire ceci je dois donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COLORREF color = GetPixel(hCaptureDC, x, y);
    Le probleme est que cette fonction est très lente, surtout quand faut le faire pour chaque pixel...
    Je ne peux donc pas faire comme ceci...
    J'avais espéré que libavcodec ou swscale de ffmpeg pouvait le faire, mais je n'arrive pas a utiliser la fonction sws_scale avec mon HBitmap récupéré depuis un CreateCompatibleBitmap.
    Tu peux mapper un bitmap en mémoire en utilisant CreateDIBSection, ça te permet de faire des modifs sur ton image bien plus rapidement.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Par défaut
    Et comment je peux utiliser CreateDibSection après pour avoir mon pixel (ou alors directement la valeur R, G et B d'un pixel) ?

  6. #6
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    HBITMAP CreateDIBSection(
    __in HDC hdc,
    __in const BITMAPINFO *pbmi,
    __in UINT iUsage,
    __out VOID **ppvBits,
    __in HANDLE hSection,
    __in DWORD dwOffset
    );

    ppvBits [out] :
    A pointer to a variable that receives a pointer to the location of the DIB bit values.
    La fonction te sors un pointeur vers le bitmap, grâce à ça tu peux lire et écrire dans le bitmap.

Discussions similaires

  1. Bitmap en niveau de Gris / Dll -> HBitMap
    Par thonydesbois dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 20/07/2006, 15h34
  2. créer une Hbitmap
    Par cenedra dans le forum Visual C++
    Réponses: 15
    Dernier message: 19/07/2006, 10h29
  3. Creer HBITMAP a partir de donnees brutes
    Par vincedom dans le forum MFC
    Réponses: 5
    Dernier message: 07/06/2006, 11h45
  4. Réponses: 13
    Dernier message: 09/03/2006, 18h17
  5. [ Win32 GDI ] récupérer le HBITMAP d'un HDC
    Par cyber_N dans le forum Windows
    Réponses: 2
    Dernier message: 20/10/2005, 21h18

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