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

Windows Discussion :

[API WIN] SAuvegarder l'image du pointeur


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut [API WIN] SAuvegarder l'image du pointeur
    Bonjour,

    Comme le titre du sujet l'indique, je souhaiterai enregistrer la forme du pointeur (fleche, double fleche, sablier), sous forme de fichier "brut" sur le disque dur.

    Malheureusement, tous mes essais on été vains jusqu'alors...

    Je récupere bien les informations du curseur via , pour pouvoir accéder au handle du curseur avec l'attribut hCursor que me retourne cette fonction.

    Le Handle est valide, mais les données sont toutes à 0 : image noire.

    J'ai cherché sur les sujets ici mais je n'ai rien trouvé (peut être ai-je raté quelque chose)

    Je me tourne donc vers vous, si vous aviez une idée pour moi, merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Tu devrais plutôt essayer de poster sur le forum Développement Windows

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par eyghon
    Le Handle est valide, mais les données sont toutes à 0 : image noire.
    Comment utilises-tu le handle en question ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Voici mon code:

    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
    CURSORINFO icur;
      HDC workingDC;
      HPALETTE pal;
      HBITMAP hBitmap;  
      int w = GetSystemMetrics(SM_CXCURSOR);
      int h = GetSystemMetrics(SM_CYCURSOR);
      unsigned char* bits = new unsigned char[3*w*h];
      
      
      // 1 - résupération de l'icone du curseur
      icur.cbSize = sizeof(icur);
      if (GetCursorInfo(&icur) == 0)
      {
        tracer(-1);
        return ;
      }
      SelectObject(ref, icur.hCursor);
      DrawIcon( ref, 1, 1, icur.hCursor);
      hBitmap = CreateCompatibleBitmap(ref, w, h);
      if (hBitmap == NULL)
         tracer("Ne pas chercher plus loin");
      else
          tracer("Continuons");
          
      SelectObject(ref, hBitmap);
      BitmapToDIB( hBitmap, pal, bits);
      tracer("+1");
    La fonction BitmapToDib prend en entrée un HBITMAP et un HPALETTE (qui peut etre nul), et fournit un tableau des données brutes de l'image: bits.

    Il est fort probable que je fasse des trucs en dépit du bon sens, je suis relativement catatsrophique sur l'API Windows.

  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Oui, ta gestion du bitmap ne va pas (tu dessines d'abord dedans, et ensuite tu le crée...).
    C'est quoi ref ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    ref est en fait le HDC obtenu dans le main via GetDC(NULL), c'est le contexte graphique de base si je ne m'abuse?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    On peut le faire différemment mais personnellement j'utiliserais GetBitmapBits() pour récupérer le corps de la bitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BITMAP bm;
    ::GetObject ((HGDIOBJ) hBitmap, sizeof(BITMAP), &bm);
    LPBYTE pBits = new BYTE[bm.bmWidthBytes * bm.bmHeight];
    ::GetBitmapBits (hBitmap, (LONG) (bm.bmWidthBytes * bm.bmHeight), (LPVOID) pBits);
    
    // faire le traitement sur pBits ici
    // ...
    
    delete [] pBits;
    C'est beaucoup plus simple que de passer par une DIB, mais en revanche je ne suis pas sûr que l'alpha soit OK dans le buffer cible.
    Si tu n'as pas besoin de récupérer la couche alpha, le résultat est garanti, sinon il faudrait tester...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2010, 17h58
  2. [API WIN] Eviter qu'un prog se lance 2 fois...
    Par asher256 dans le forum Windows
    Réponses: 2
    Dernier message: 07/10/2005, 15h58
  3. La programmation API win en C
    Par AjJi dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 29/09/2005, 22h22
  4. [VisualC++] Copie et sauvegarde d'images
    Par dananchet dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2005, 13h30
  5. [API WIN 32]effacer un fichier
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 30/01/2004, 13h51

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