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 :

Ouvrir et modifier une image .bmp


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Points : 116
    Points
    116
    Par défaut Ouvrir et modifier une image .bmp
    Bonjour mon problème est " simple " : créer une image bmp en C et puis pouvoir la lire ensuite.

    J'ai entendu parlé de HBITMAP et d'autres fonctions mais je ne sais absolument pas comment les utiliser.

    - Faut t-il télécharger une librairire spéciale pour utiliser la " GDI " comme j'ai entendu parler ?

    - Existe-t-il un cours ou un tutoriel pour savoir commment utiliser les fonctions de bases ?

    - Si non, pouvez-vous me faire un programme tout simple ( désolé je ne postes pas de code car je ne connais rien du tout ) qui fait la chose suivante:

    ouvrir un fichier image.bmp ( le créer s'il n'existe pas ) et par exemple faire une boucle qui remplit quelques lignes de pixels et enregistre l'image.



    Merci beaucoup.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Il n'y a pas de "Librairie spéciale", il y a Windows. Cela donne des programme tournant sous Windows (ou Wine, ou ReactOS) uniquement.

    Windows propose de base des fonctions pour charger une image .bmp, mais rien pour l'enregistrer directement. Par contre, il y a un exemple de code ici:
    Storing an Image

  3. #3
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut fichier bitmap avec Windows (GDI)
    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
    //NB : LPSTR=char*
    
    //Charger un bitmap
    HBITMAP LoadBitmapEx(LPSTR lpszFileName)
    {
    	HBITMAP hBmp;
    	hBmp=HANDLE LoadImage(NULL,lpszFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    	return hBmp;
    }
    
    //Libère le BITMAP
    void FreeBitmap(hBITMAP hBmp)
    {
    	DeleteObject(hBmp);
    }
    
    //Largeur BITMAP
    int GetBitmapWidth(HBITMAP hBmp)
    {
    	BITMAP Bmp;
    
    	GetObject(hBmp,sizeof(BITMAP),&Bmp);
    	return Bmp.bmWidth;
    }
    
    //Hauteur BITMAP
    int GetBitmapHeight(HBITMAP hBmp)
    {
    	BITMAP Bmp;
    
    	GetObject(hBmp,sizeof(BITMAP),&Bmp);
    	return Bmp.bmHeight;
    }
    
    //Lire un pixel dans un bitmap
    //COLORREF=unsigned long
    //Les couleurs sont stockées sous le format
    //0x00RRGGBB (R=rouge,G=vert,B=bleu)
    COLORREF ReadPixel(HBITMAP hBmp,int x,int y)
    {
    	HDC hDC;
    	COLORREF dwPixel;
    
    	hDC=CreateCompatibleDC(NULL);
    
    	SelectObject(hDC,hBmp);
    	dwPixel=GetPixel(hDC,x,y);
    
    	DeleteDC(hDC);
    	return dwPixel;
    }
    
    //Pour écrire dans un BITMAP, il faut utiliser
    //SetDIBits ( voir MSDN )
    //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_0qk3.asp
    
    //Pour l'enregistrement dans un fichier BITMAP,
    //C'est à TOI de coder les fonctions.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    1. Pourquoi LPSTR et non LPCSTR ?
    2. Si tu utilises spécifiquement LP[C]STR et non LP[C]TSTR, tu dois aussi utiliser spéficiquement LoadImageA()
    3. Il y a un type HANDLE qui traine dans ta ligne "hBmp=..." Je me demande si ça compile...

    Je passe sur la lenteur de ReadPixel(), on n'est pas tellement à ça près...

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Points : 54
    Points
    54
    Par défaut Très curieuse
    Salut
    Si tu trouve une solution, je serais très currieuse de voir ton code merci

  6. #6
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Tout dépend...

    Si tu generes toute l'image dans ton programme (sans partir d'une image chargée) pixel par pixel, je te conseilles ceci :

    Tu crée un tableau de données 32bits à la dimension de l'image :

    int bufferImage[largeur][hauteur];

    Puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char rouge,vert,bleu,alpha;
    
    for (y=0;y<hauteur;y++)
       for (x=0;x<largeur;x++)
       {
          rouge = calculeRouge(x,y);
          vert = calculeVert(x,y);
          bleu = calculeBleu(x,y);
          alpha = calculeAlpha(x,y);
          bufferImage[x][y] = (rouge << 24) + (vert << 16) + (bleu << 8) + alpha;
       }
    Ensuite, tu crée un HBITMAP à la bonne taille, tu fait un SetDIBBits (cf MSDN) sur l'ensemble de l'image avec comme source ton tableau précalculé, et tu enregistre ce HBITMAP sur le disque (ça je sais pas faire)

    ----------------

    Si tu utilises une image préchargée, ou les fonctions de windows pour dessiner des lignes et compagnie, tu peux commencer par créer un HBITMAP, puis dessiner dedans avec des BitBlt, DrawLine, DrawText etc...

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/08/2008, 16h24
  2. Réponses: 2
    Dernier message: 19/11/2004, 08h54
  3. [C#] Comment convertir une image bmp en jpg !!!
    Par vandeyy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2004, 20h37
  4. inserer une image BMP dans un fichier rtf
    Par Alice9 dans le forum MFC
    Réponses: 17
    Dernier message: 06/07/2004, 10h31
  5. [BPW] Impression d'une image BMP
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 21/08/2003, 14h34

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