Guest User

Untitled

a guest
Apr 22nd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1.  
  2. #include "BMP_Image.h"
  3.  
  4.  
  5.  
  6. using namespace std;
  7.  
  8. /*BMP_Image::BMP_Image() {
  9. fh.bfType=19778;
  10. fh.bfReserved1=0;
  11. fh.bfReserved2=0;
  12.  
  13. ih.biPlanes=1;
  14. ih.biBitCount=24;
  15. ih.biCompression=0;
  16. ih.biXpelsPerMeter=0;
  17. ih.biYpelsPerMeter=0;
  18. ih.biClrImportant=0;
  19. }*/
  20.  
  21. BMP_Image::BMP_Image(std::string &str) {
  22. ifstream ifile;
  23. ifile.open(str.c_str() ,ios::binary | ios::in);
  24. ifile.read((char *)(&fh.bfType), sizeof(word));
  25. ifile.read((char*)(&fh.bfSize),sizeof(dword));
  26. ifile.read((char*)(&fh.bfReserved1),sizeof(word));
  27. ifile.read((char*)(&fh.bfReserved2),sizeof(word));
  28. ifile.read((char*)(&fh.bfOffBits),sizeof(dword));
  29. ifile.read((char*)(&ih.biSize),sizeof(dword));
  30. ifile.read((char*)(&ih.biWidth),sizeof(dword));
  31. ifile.read((char*)(&ih.biHeight),sizeof(dword));
  32. ifile.read((char*)(&ih.biPlanes),sizeof(word));
  33. ifile.read((char*)(&ih.biBitCount),sizeof(word));
  34. ifile.read((char*)(&ih.biCompression),sizeof(dword));
  35. ifile.read((char*)(&ih.biSizeImage),sizeof(dword));
  36. ifile.read((char*)(&ih.biXpelsPerMeter),sizeof(dword));
  37. ifile.read((char*)(&ih.biYpelsPerMeter),sizeof(dword));
  38. ifile.read((char*)(&ih.biClrUsed),sizeof(dword));
  39. ifile.read((char*)(&ih.biClrImportant),sizeof(dword));
  40. unsigned long hoogte=ih.biWidth;
  41. unsigned long breedte=ih.biHeight;
  42.  
  43. image= new Pixel*[hoogte];
  44. unsigned long i,k,l;
  45. for(i=0;i<hoogte;i++) {
  46. image[i]=new Pixel[breedte];
  47. }
  48.  
  49. // één byte is 8 bits!
  50. //prentje zal zo lang zijn: ih.biWidth*24
  51. //maar moet veelvoud van 32 zijn => ih.biWidth*24%32 aanvullen tot 32 voud
  52. // er gaan 32-((ih.biWidth*24)%32) nulbits zijn
  53. char* rest=new char[(32-((ih.biWidth*24)%32))/8];
  54.  
  55. for(k=0;k<hoogte;k++) { // per k wordt 1 scanlijn ingelezen
  56. for(l=0;l<breedte;l++) { //l doorloopt deze scanlijn
  57. byte ingelezen;
  58.  
  59. ifile.read((char*)(&ingelezen),sizeof(byte));
  60. image[k][l].setRed(ingelezen);
  61.  
  62. ifile.read((char*)(&ingelezen),sizeof(byte));
  63. image[k][l].setGreen(ingelezen);
  64.  
  65. ifile.read((char*)(&ingelezen),sizeof(byte));
  66. image[k][l].setBlue(ingelezen);
  67. }
  68. ifile.read(rest,(32-((ih.biWidth*24)%32))/8*sizeof(byte));
  69. }
  70. ifile.close();
  71.  
  72.  
  73. /*int test_veelvoud = 8*(ih.biWidth*sizeof(Pixel))%32; //in bits
  74. if(test_veelvoud != 0) //laatste 32 tal aanvullen met 32-test_veelvoud # 0en
  75. test_veelvoud = 32 - test_veelvoud; //aantal nodige nullen
  76. test_veelvoud /= 8;
  77.  
  78. byte*ruimte=new byte[3];*/
  79.  
  80.  
  81. }
  82.  
  83.  
  84. long BMP_Image::getWidth() {
  85. return ih.biWidth;
  86. }
  87.  
  88. long BMP_Image::getHeight(){
  89. return ih.biHeight;
  90. }
  91.  
  92. void BMP_Image::drawPixel(Pixel p, long Xpos, long Ypos){
  93. image[Xpos][Ypos]=p;
  94. }
  95.  
  96.  
  97. Pixel BMP_Image::getPixel(long Xpos, long Ypos){
  98. return image[Xpos][Ypos];
  99. }
  100.  
  101. void BMP_Image::writeToFile(std::string& str){
  102. ofstream ofile;
  103. ofile.open(str.c_str() ,ios::binary | ios::out);
  104. ofile.write((char *)(&fh.bfType), sizeof(word));
  105. ofile.write((char*)(&fh.bfSize),sizeof(dword));
  106. ofile.write((char*)(&fh.bfReserved1),sizeof(word));
  107. ofile.write((char*)(&fh.bfReserved2),sizeof(word));
  108. ofile.write((char*)(&fh.bfOffBits),sizeof(dword));
  109. ofile.write((char*)(&ih.biSize),sizeof(dword));
  110. ofile.write((char*)(&ih.biWidth),sizeof(dword));
  111. ofile.write((char*)(&ih.biHeight),sizeof(dword));
  112. ofile.write((char*)(&ih.biPlanes),sizeof(word));
  113. ofile.write((char*)(&ih.biBitCount),sizeof(word));
  114. ofile.write((char*)(&ih.biCompression),sizeof(dword));
  115. ofile.write((char*)(&ih.biSizeImage),sizeof(dword));
  116. ofile.write((char*)(&ih.biXpelsPerMeter),sizeof(dword));
  117. ofile.write((char*)(&ih.biYpelsPerMeter),sizeof(dword));
  118. ofile.write((char*)(&ih.biClrUsed),sizeof(dword));
  119. ofile.write((char*)(&ih.biClrImportant),sizeof(dword));
  120. unsigned long hoogte=ih.biWidth;
  121. unsigned long breedte=ih.biHeight;
  122.  
  123.  
  124. // één byte is 8 bits!
  125. //prentje zal zo lang zijn: ih.biWidth*24
  126. //maar moet veelvoud van 32 zijn => ih.biWidth*24%32 aanvullen tot 32 voud
  127. // er gaan 32-((ih.biWidth*24)%32) nulbits zijn
  128. int rest=(32-((ih.biWidth*24)%32))/8; // of rest aantal nulbytes
  129. int m;
  130. byte n=0;
  131.  
  132. unsigned long k,l;
  133. for(k=0;k<hoogte;k++) { // per k wordt 1 scanlijn ingelezen
  134. for(l=0;l<breedte;l++) { //l doorloopt deze scanlijn
  135. byte ingelezen;
  136.  
  137. ingelezen=(image[k][l]).getRed();
  138. ofile.write((char*)&ingelezen,sizeof(byte));
  139.  
  140. ingelezen=image[k][l].getGreen();
  141. ofile.write((char*)(&ingelezen),sizeof(byte));
  142.  
  143. ingelezen=image[k][l].getBlue();
  144. ofile.write((char*)(&ingelezen),sizeof(byte));
  145. }
  146. for(m=0;m<rest-3;m++) {
  147. ofile.write((char*)(&n),sizeof(byte));
  148. }
  149. }
  150. ofile.close();
  151.  
  152. }
Add Comment
Please, Sign In to add comment