Advertisement
BNPAN

TD5P2

Nov 17th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.00 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// VOTRE ENTÊTE ICI
  3. ////////////////////////////////////////////////////////////////////////////////
  4.  
  5.  
  6. #pragma region "Inclusions" //{
  7.  
  8. #include <ciso646>
  9. #include <cstddef>
  10. #include <cstdint>
  11.  
  12. #include <fstream>
  13. #include <string>
  14.  
  15. #include <iostream>
  16.  
  17. #include "CodeFourni.hpp"
  18.  
  19. #include "CodeDemande.hpp"
  20.  
  21.  
  22. using namespace std;
  23.  
  24. #pragma endregion //}
  25.  
  26.  
  27.  
  28.  
  29. #pragma region "Globaux" //{
  30.  
  31. #pragma region "Fonctions" //{
  32.  
  33. EnteteDib lireEnteteFichier ( fstream& fichier )
  34. {
  35.     EnteteBmp enteteBmp;
  36.     enteteBmp = construireBmpVide();
  37.     EnteteDib enteteDib;
  38.     enteteDib = construireDibVide();
  39.  
  40.     fichier.seekg(0, ios::beg);
  41.  
  42.     fichier.read((char*)&enteteBmp, sizeof(enteteBmp));
  43.  
  44.     fichier.read((char*)&enteteDib, sizeof(enteteDib));
  45.    
  46.  
  47.     return enteteDib;
  48. }
  49.  
  50.  
  51. void lireDonneesImage ( fstream& fichier, Image& image )
  52. {
  53.     ///pas necessair, image est pas vide
  54. //  EnteteDib enteteDib = lireEnteteFichier(fichier);
  55. //  enteteDib.hauteurImage = image.hauteur;
  56. //enteteDib.largeurImage = image.largeur;
  57.     Pixel pixel;
  58.     fichier.seekg(2, ios::beg);
  59.  
  60.     for (int i = 0; i < image.hauteur; i++) {
  61.         for (int j = 0; j < image.largeur; j++) {
  62.             fichier.read((char*)&pixel, sizeof(pixel));
  63.         }
  64.         int tailleP = calculerTaillePadding(image);
  65.         fichier.seekg(tailleP, ios::cur);
  66.     }
  67.    
  68.    
  69.    
  70.  
  71.    
  72.    
  73.     // TODO: Se positionner au début du tableau de pixels dans le fichier.
  74.     // TODO: Pour chaque ligne de l'image, lire la ligne et sauter le padding.
  75. }
  76.  
  77.  
  78. void ecrireDonneesImage ( fstream& fichier, const Image& image )
  79. {
  80.    
  81.     fichier.seekg(2, ios::beg);
  82.     // TODO: Se positionner au début du tableau de pixels dans le fichier (après
  83.     //       les entêtes).
  84.    
  85.     for (int i = image.hauteur; i > 0; i--) {
  86.         for (int j = 0; j < image.largeur; j++) {
  87.             fichier.write((char*)&image.pixels[i-1][j], sizeof(image.pixels[i - 1][j]));
  88.         }
  89.         for (int j = 0; j < calculerTaillePadding(image); j++) {
  90.             ///fichier.write((char*)&//, sizeof(//);
  91.         }
  92.     }
  93.    
  94.     // TODO: Pour chaque ligne de l'image, écrire la ligne puis écrire des bytes
  95.     //       à zéro pour le padding.
  96. }
  97.  
  98.  
  99. void ecrireImage ( const string& nomFichier, const Image& image, bool& ok ) ///GOOD
  100. {
  101.     // TODO: Ouvrir un fichier en écriture binaire.
  102.     fstream sortie;
  103.     sortie.open(nomFichier, ios::binary);
  104.  
  105.  
  106.  
  107.  
  108.     // Si l'ouverture n'a pas échouée :
  109.     if (sortie.fail == false) {
  110.  
  111.         // TODO: Construire les entêtes à partir de l'image.
  112.         EnteteBmp enteteBmp = construireEnteteBmp(image);
  113.         EnteteDib enteteDib = construireEnteteDib(image);
  114.         // TODO: Écrire les entêtes dans le fichier.
  115.         sortie.write((char*)&enteteBmp, sizeof(enteteBmp));
  116.         sortie.write((char*)&enteteDib, sizeof(enteteDib));
  117.         // TODO: Écrire les données (pixels) de l'image dans le fichier.
  118.         ecrireDonneesImage(sortie, image);
  119.     }
  120.  
  121. }
  122.  
  123.  
  124. Image allouerImage ( unsigned largeur, unsigned hauteur )
  125. {
  126.     ///
  127.     Image image;
  128.     if (largeur != 0 && hauteur != 0) {
  129.        
  130.         image.hauteur = hauteur;
  131.         image.largeur = largeur;
  132.  
  133.         Pixel** pixel2D;
  134.         pixel2D = new Pixel*[hauteur];
  135.  
  136.         for (int i = 0; i < hauteur; i++) {
  137.             pixel2D[i] = new Pixel[largeur];
  138.         }
  139.         image.pixels = pixel2D;
  140.         return image;
  141.     }
  142.     else {
  143.         return image;
  144.     }
  145.     // Si la largeur ET la hauteur ne sont pas nulles :
  146.         // TODO: Affecter les dimensions à l'image.
  147.        
  148.         // TODO: Allouer un tableau dynamique de pixels pour l'image.
  149.         //       On veut Image::hauteur de lignes qui ont chacune
  150.         //       Image::largeur de pixels.
  151. }
  152.  
  153.  
  154. void desallouerImage ( Image& image )
  155. {
  156.     if (image.pixels != 0) {
  157.         for (int i = 0; i < image.hauteur; i++) {
  158.    
  159.             delete[] image.pixels[i];
  160.            
  161.  
  162.         }
  163.         delete[] image.pixels;
  164.         image.pixels = 0;
  165.     }
  166.     // Si le tableau dynamique de l'image n'est pas nul :
  167.         // TODO: Désallouer le tableau 2D.
  168. }
  169.  
  170.  
  171. Image copierImage ( const Image& image )
  172. {
  173.     // TODO: Allouer une image de la même taille que celle donnée.
  174.     Image imageRetour;
  175.     imageRetour = allouerImage(image.largeur, image.hauteur);
  176.  
  177.  
  178.     for (int i = 0; i < image.hauteur; i++) {
  179.         for (int j = 0; j < image.largeur; j++) {
  180.             imageRetour.pixels[i][j] = image.pixels[i][j];
  181.         }
  182.     }
  183.     // TODO: Copier tous les pixels.
  184. }
  185.  
  186.  
  187. Image lireImage ( const string& nomFichier, bool& ok )
  188. {
  189.     // TODO: Ouvrir le fichier en lecture binaire.
  190.     fstream inBin(nomFichier,  ios::binary);
  191.  
  192.     if (inBin.fail() == false) {
  193.         EnteteDib enteteDib = lireEnteteFichier(inBin);
  194.         allouerImage(enteteDib.largeurImage, enteteDib.hauteurImage);
  195.        
  196.     }
  197.     else {
  198.         cout << "Erreur d'ouverture" << endl;
  199.     }
  200.     // Si l'ouverture n'a pas échouée :
  201.         // TODO: Lire l'entête DIB.
  202.        
  203.         // TODO: Allouer une image selon le contenu du DIB.
  204.        
  205.         // TODO: Lire les pixels du fichier.
  206. }
  207.  
  208.  
  209. Image extraireRectangle ( const Image& image, const Rectangle& zone )
  210. {
  211.     // Si la zone demandée est valide :
  212.         // TODO: Allouer une image de la taille de la zone à extraire.
  213.        
  214.         // TODO: Copier les pixels de la zone.
  215. }
  216.  
  217. #pragma endregion //}
  218.  
  219. #pragma endregion //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement