Advertisement
Guest User

codefourni.hpp

a guest
Nov 19th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// \file    CodeFourni.hpp
  3. /// \author  Charles Hosson
  4. /// \version Dernière entrée : 2017/11/06
  5. /// \since   Création : 2015/10/11
  6. ///
  7. /// Le code fourni aux élèves est constitué des structures d'enregistrement
  8. /// et de fonctions utilitaires faisant le traitement d'image.
  9. ////////////////////////////////////////////////////////////////////////////////
  10.  
  11. #pragma once
  12.  
  13.  
  14. #pragma region "Inclusions" //{
  15.  
  16. #include <ciso646>
  17. #include <cstddef>
  18. #include <cstdint>
  19.  
  20.  
  21. using namespace std;
  22.  
  23. #pragma endregion //}
  24.  
  25.  
  26.  
  27.  
  28. #pragma region "Déclarations" //{
  29.  
  30. #pragma region "Macros" //{
  31.  
  32. #if defined(__GNUC__) || defined(__clang__)
  33.     #define PACKED_STRUCT(...) \
  34.     __VA_ARGS__ __attribute__((__packed__))
  35. #elif defined(_MSC_VER)
  36.     #define PACKED_STRUCT(...) \
  37.     __pragma(pack(push, foo, 1)) __VA_ARGS__ __pragma(pack(pop, foo))
  38. #else
  39.     static_assert(false, "Compiler not supported for macro PACKED_STRUCT")
  40. #endif
  41.  
  42. #pragma endregion //}
  43.  
  44.  
  45. #pragma region "Constantes" //{
  46.  
  47. static const unsigned ALIGNEMENT_PIXELS = 4;
  48.  
  49. static const unsigned BMP_ID = 0x4D42; // "BM"
  50. static const unsigned COMPRESSION_BI_RGB = 0; // Pas de compression
  51. static const unsigned RESOLUTION_IMPRESSION = 2835; // 72 DPI
  52.  
  53. #pragma endregion //}
  54.  
  55.  
  56. #pragma region "Structures d'enregistrement" //{
  57.  
  58. /**
  59.  * \struct Point
  60.  * \brief  Un point en 2D
  61.  *
  62.  * Un point avec des coordonnées en X et Y, en pixels.
  63.  */
  64. struct Point
  65. {
  66.     unsigned x;
  67.     unsigned y;
  68. };
  69.  
  70.  
  71. /**
  72.  * \struct Rectangle
  73.  * \brief  Un rectangle.
  74.  *
  75.  * Un rectangle est représenté par deux points, dont chacun possède des
  76.  * coordonnées en X et en Y. Le premier point est le coin bas-gauche et l'autre
  77.  * est le coin haut-droit.
  78.  */
  79. struct Rectangle
  80. {
  81.     Point coin1;
  82.     Point coin2;
  83. };
  84.  
  85.  
  86. /**
  87.  * \struct Pixel
  88.  * \brief  Enregistrement qui représente un pixel RGB24.
  89.  *
  90.  * Un pixel RGB24 possède les trois couleurs rouge, vert et bleu, dont
  91.  * l'ordre dans la mémoire est BGR. Chaque couleur est représentée par un
  92.  * entier non-signé à 8 bits.
  93.  */
  94. struct Pixel
  95. {
  96.     uint8_t b;
  97.     uint8_t g;
  98.     uint8_t r;
  99. };
  100.  
  101.  
  102. /**
  103.  * \struct Image
  104.  * \brief  Enregistrement représentant une image.
  105.  *
  106.  * Une image possède à la base une largeur, une hauteur et une séquence de
  107.  * pixels.
  108.  * <p>
  109.  * Il est important de noter que les pixels sont organisés en un tableau de
  110.  * lignes. La première dimension représente le numéro de ligne et la deuxième
  111.  * dimension représente le numéro de colonne. Les coordonnées des pixels sont
  112.  * donc en (Y,X), <b>PAS EN (X,Y)</b>.
  113.  */
  114. struct Image
  115. {
  116.     unsigned largeur;
  117.     unsigned hauteur;
  118.     Pixel**  pixels;
  119. };
  120.  
  121.  
  122. /**
  123.  * \struct EnteteBmp
  124.  * \brief  Entête BMP d'un bitmap.
  125.  *
  126.  * L'entête BMP d'une image bitmap vient en premier dans le fichier et le
  127.  * format est toujours le même. Elle contient de l'information générale sur
  128.  * le fichier d'image.
  129.  */
  130. PACKED_STRUCT(
  131. struct EnteteBmp
  132. {
  133.     uint16_t id;
  134.     uint32_t tailleFichier;
  135.     uint16_t inutilise[2];
  136.     uint32_t positionTableau;
  137. });
  138.  
  139.  
  140. /**
  141.  * \struct EnteteDib
  142.  * \brief  Entête DIB d'un bitmap.
  143.  *
  144.  * L'entête DIB d'une image bitmap vient après l'entête BMP dans le fichier
  145.  * et il existe beaucoup de formats différents. Elle contient de
  146.  * l'information détaillée sur l'image et définit le format de pixel.
  147.  * <p>
  148.  * Dans ce TD, nous utilisons le format BITMAPINFOHEADER avec des pixels
  149.  * RGB24.
  150.  */
  151. PACKED_STRUCT(
  152. struct EnteteDib
  153. {
  154.     uint32_t tailleEntete;
  155.     int32_t  largeurImage;
  156.     int32_t  hauteurImage;
  157.     uint16_t nbPlansCouleur;
  158.     uint16_t bpp;
  159.     uint32_t compression;
  160.     uint32_t tailleTableau;
  161.     int32_t  resolutionImpression[2];
  162.     uint32_t nbPalettes;
  163.     uint32_t nbCouleursImportantes;
  164. });
  165.  
  166. #pragma endregion //}
  167.  
  168.  
  169. #pragma region "Globaux" //{
  170.  
  171. void convertirNoirEtBlanc ( Image& );
  172.  
  173. bool estRectangleValide ( const Rectangle& );
  174.  
  175. bool estZoneValide ( const Image&, const Rectangle& );
  176.  
  177. EnteteBmp construireBmpVide ( );
  178.  
  179. EnteteDib construireDibVide ( );
  180.  
  181. unsigned calculerTaillePadding ( const Image& );
  182.  
  183. unsigned calculerTailleTableau ( const Image& );
  184.  
  185. EnteteBmp construireEnteteBmp ( const Image& );
  186.  
  187. EnteteDib construireEnteteDib ( const Image& );
  188.  
  189. void tracerLigneHorizontale ( Image&, Pixel, const Point[2], unsigned );
  190.  
  191. void tracerLigneVerticale ( Image&, Pixel, const Point[2], unsigned );
  192.  
  193. void dessinerCarre ( Image&, Pixel, const Point&, unsigned );
  194.  
  195. void tracerContourRectangle ( Image&, Pixel, const Rectangle&, unsigned );
  196.  
  197. #pragma endregion //}
  198.  
  199. #pragma endregion //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement