Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un bitmap

    19 mars 2008 à 19:59:46

    Bonjour, je suis entrain de faire un programme qui créer une image bitmap en noir, et par dessus des rectangles de couleurs rouge/vert.
    J'ai commencé mon projet en cours sous visual studio, il fonctionne très bien, mais la je l'ai mis sur Visual C++ 9 expresse, le programme se lance mais ne créer plus l'image....

    Il marque lors de l'éxecution:

    Citation : message

    'miniprojet08.exe' : Chargé 'E:\Documents and Settings\s0ak\Bureau\miniprojet08\Debug\miniprojet08.exe', Les symboles ont été chargés.
    'miniprojet08.exe' : Chargé 'E:\WINDOWS\system32\ntdll.dll'
    'miniprojet08.exe' : Chargé 'E:\WINDOWS\system32\kernel32.dll'
    Le programme '[2824] miniprojet08.exe: Natif' s'est arrêté avec le code 0 (0x0).



    Avez vous une solution ?
    Merci d'avance.

    Codes sources :

    miniprojet08.cpp
    1. #include "stdafx.h"
    2. #include "bmp.h"
    3. #include <iostream>
    4. using namespace std;
    5. int _tmain(int argc, _TCHAR* argv[])
    6. {
    7.         int largeur,hauteur;
    8.         cout << "Largeur : "; cin >> largeur;
    9.         cout << "Hauteur : "; cin >> hauteur;
    10.         bmp monImageBMP;
    11.         monImageBMP.creationBMP("monImage.bmp",largeur,hauteur);
    12.         monImageBMP.rectangle(20,30,60,40,2);
    13.         monImageBMP.rectangle(25,10,40,45,2);
    14.         cin.ignore(2);
    15.         return 0;
    16. }


    bmp.h
    1. #pragma once
    2. #include <fstream>
    3. using namespace std;
    4. class bmp
    5. {
    6. public:
    7.         bmp(void);
    8.         char* creationBMP(char* nomFichier, int largeur, int hauteur);
    9.         void mettreRouge(int x, int y);
    10.         void mettreVert(int x, int y);
    11.         void rectangle(int x, int y, int largeur, int hauteur, int profondeur);
    12. private:
    13.         fstream sortie;
    14.         int m_largeur;
    15.         int m_hauteur;
    16.         int m_octetParLigne;
    17. };


    bmp.cpp
    1. #include "StdAfx.h"
    2. #include "bmp.h"
    3. #include <fstream>
    4. using namespace std;
    5. bmp::bmp(void)
    6. {
    7.         this->m_hauteur = 0;
    8.         this->m_largeur = 0;
    9.         this->m_octetParLigne = 0;
    10. }
    11. char* bmp::creationBMP(char* nomFichier, int largeur, int hauteur)
    12. {
    13.         short int bibitcount = 24;
    14.         int bsize = 40;
    15.         int boffbits = 54;
    16.         int bisizeimage = largeur * hauteur * bibitcount/8 ;
    17.         int taillefichier = bisizeimage + boffbits;
    18.         int rajout = 4-((largeur*3)%4);
    19.         if (rajout == 4)
    20.                 rajout = 0;
    21.         this->m_octetParLigne = (largeur*3)+rajout;
    22.         this->m_hauteur = largeur;
    23.         this->m_largeur = hauteur;
    24.         sortie.open(nomFichier);
    25.         //Première en-tête
    26.         sortie.write("BM",2);
    27.         sortie.write((char*)&taillefichier,sizeof(taillefichier));
    28.         int bfreserved = 0;
    29.         sortie.write((char*)&bfreserved,sizeof(bfreserved));
    30.         sortie.write((char*)&boffbits,sizeof(boffbits));
    31.         //Seconde en-tête
    32.         sortie.write((char*)&bsize,sizeof(bsize));
    33.         sortie.write((char*)&largeur,sizeof(largeur));
    34.         sortie.write((char*)&hauteur,sizeof(hauteur));
    35.         short int biplanes = 1;
    36.         sortie.write((char*)&biplanes,sizeof(biplanes));
    37.         sortie.write((char*)&bibitcount,sizeof(bibitcount));
    38.         int bicompression = 0;
    39.         sortie.write((char*)&bicompression,sizeof(bicompression));
    40.         sortie.write((char*)&bisizeimage,sizeof(bisizeimage));
    41.         int bixpelspermeter = 0;
    42.         sortie.write((char*)&bixpelspermeter,sizeof(bixpelspermeter));
    43.         int biypelspermeter = 0;
    44.         sortie.write((char*)&biypelspermeter,sizeof(biypelspermeter));
    45.         int biclrused = 0;
    46.         sortie.write((char*)&biclrused,sizeof(biclrused));
    47.         int biclrimportant = 0;
    48.         sortie.write((char*)&biclrimportant,sizeof(biclrimportant));
    49.         //Création image
    50.         unsigned char b,v,r;
    51.         for(int i=0; i<hauteur; i++)
    52.         {
    53.                 for(int j=0; j<largeur; j++)
    54.                 {
    55.                         v = r = b = 0x00;
    56.                         sortie.write((char*)&b,1);
    57.                         sortie.write((char*)&v,1);
    58.                         sortie.write((char*)&r,1);
    59.                 }
    60.                 //compléter la ligne
    61.                 for(int h = 0; h < rajout; h++)
    62.                 {
    63.                         sortie.write((char*)&b,1);
    64.                         sortie.write((char*)&v,1);
    65.                         sortie.write((char*)&r,1);
    66.                 }
    67.         }
    68.         sortie.close();
    69.         return NULL;
    70. }
    71. void bmp::mettreRouge(int x, int y)
    72. {       
    73.         unsigned char r = 0xff;
    74.         int pos = 54 + this->m_octetParLigne*y + x*3 + 2;
    75.         sortie.seekg(pos);
    76.         sortie.write((char*)&r,1);
    77. }
    78. void bmp::mettreVert(int x, int y)
    79. {       
    80.         unsigned char v = 0xff;
    81.         int pos = 54 + this->m_octetParLigne*y + x*3 + 1;
    82.         sortie.seekg(pos);
    83.         sortie.write((char*)&v,1);
    84. }
    85. void bmp::rectangle(int x, int y, int largeur, int hauteur, int profondeur)
    86. {
    87.         //ligne du bas
    88.         for(int i=x; i<x + largeur; ++i)
    89.         {
    90.                 mettreRouge(i,y);       
    91.                 mettreVert(i + profondeur,y);
    92.         }
    93.         //ligne du haut
    94.         for(int i=x; i<x + largeur; ++i)
    95.         {
    96.                 mettreRouge(i,y + hauteur);     
    97.                 mettreVert(i + profondeur,y + hauteur);
    98.         }
    99.         //ligne de gauche
    100.         for(int i=y; i<y + hauteur + 1; ++i)
    101.         {
    102.                 mettreRouge(x,i);       
    103.                 mettreVert(x + profondeur,i);
    104.         }
    105.         //ligne de droite
    106.         for(int i=y; i<y + hauteur + 1; ++i)
    107.         {
    108.                 mettreRouge(x + largeur,i);     
    109.                 mettreVert(x + largeur + profondeur,i);
    110.         }
    111. }
    • Partager sur Facebook
    • Partager sur Twitter
      19 mars 2008 à 21:33:34

      Salut
      Est-ce que ton image est créée???
      Si oui, tu as oublié le
      1. system("PAUSE");

      à la fin du programme, avec Visual.
      sinon, je sais pas.
      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2008 à 7:22:46

        Justement le problème es la, en cours l'image ce créer, mais chez moi sous visual c++ expresse 2008 elle ne ce créer pas !
        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2008 à 9:41:01

          Tu as lu le billet auquel le lien mènes?
          D'après eux ce code d'erreur serait un bogue qui serait lié à l'utilisation du deboggeur pour obtenir l'état de sortie d'une application.
          Tu dois compilé en debug je suppose, dans ce cas là change et compile en release.
          • Partager sur Facebook
          • Partager sur Twitter

          Création d'un bitmap

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown