Image.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "Image.hpp"
  2. Image::Image()
  3. {
  4. taillex=tailley=0;
  5. pix=NULL;
  6. }
  7. Image::Image(string chemin)
  8. {
  9. ifstream is(chemin.c_str());
  10. int ret;
  11. string mn;
  12. assert(is.is_open());
  13. is >> mn;
  14. assert(!mn.compare("P3"));
  15. is >> taillex;
  16. is >> tailley;
  17. pix=new Pixel[taillex*tailley];
  18. assert(pix != NULL);
  19. is >> ret;
  20. for(int i=0;i<taillex*tailley;i++)
  21. {
  22. is >> pix[i][0];
  23. is >> pix[i][1];
  24. is >> pix[i][2];
  25. }
  26. is.close();
  27. }
  28. Image::Image(int tx, int ty, int *canal1, int *canal2, int *canal3)
  29. {
  30. taillex=tx;
  31. tailley=ty;
  32. pix=new Pixel[tx*ty];
  33. assert(pix != NULL);
  34. for(int i=0;i<tx*ty;i++)
  35. {
  36. pix[i][0]=canal1[i];
  37. pix[i][1]=canal2[i];
  38. pix[i][2]=canal3[i];
  39. }
  40. }
  41. Image::Image(Image im1, int num_canal1, Image im2, int num_canal2, Image im3, int num_canal3)
  42. {
  43. assert(im1.taillex==im2.taillex && im1.taillex==im3.taillex &&
  44. im1.tailley==im2.tailley && im1.tailley==im3.tailley &&
  45. im2.taillex==im3.taillex && im2.tailley==im3.tailley);
  46. int *can1=im1.extraire_canal(num_canal1);
  47. int *can2=im2.extraire_canal(num_canal2);
  48. int *can3=im3.extraire_canal(num_canal3);
  49. taillex=im1.taillex;
  50. tailley=im1.tailley;
  51. pix=new Pixel[taillex*tailley];
  52. assert(pix != NULL);
  53. for(int i=0;i<taillex*tailley;i++)
  54. {
  55. pix[i][0]=can1[i];
  56. pix[i][1]=can2[i];
  57. pix[i][2]=can3[i];
  58. }
  59. delete[] can1;
  60. delete[] can2;
  61. delete[] can3;
  62. }
  63. int* Image::extraire_canal(int num_canal)
  64. {
  65. assert(0<=num_canal && num_canal<=2);
  66. int *canal=new int[taillex*tailley];
  67. assert(canal != NULL);
  68. for(int i=0;i<taillex*tailley;i++)
  69. canal[i]=pix[i][num_canal];
  70. return canal;
  71. }
  72. void Image::sauver_image_fichier_ppm(const char *chemin)
  73. {
  74. ofstream os(chemin);
  75. assert(os.is_open());
  76. os << "P3" << endl << taillex << " " << tailley << endl<< "255" << endl;
  77. for(int j=0;j<tailley;j++)
  78. {
  79. for(int i=0;i<taillex;i++){
  80. os << pix[j*taillex+i][0] << " " << pix[j*taillex+i][1] << " " << pix[j*taillex+i][2] << " ";
  81. os << endl;}
  82. }
  83. os.close();
  84. }
  85. Image::~Image()
  86. {
  87. delete[] pix;
  88. }
  89. void Image::affiche()
  90. {
  91. cout << "Taille : " << taillex << "x" << tailley << " pixels" << endl;
  92. for(int j=0;j<tailley;j++)
  93. {
  94. for (int i=0; i<taillex; i++)
  95. cout << "(" << pix[j*taillex+i][0] << "," << pix[j*taillex+i][1] << "," << pix[j*taillex+i][2] << ") ";
  96. cout << endl;
  97. }
  98. }