Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <stdint.h>
  5. #ifndef MAIN_H_INCLUDED
  6. #define MAIN_H_INCLUDED
  7.  
  8.  
  9. typedef struct
  10. {
  11. unsigned int bfType;
  12. unsigned long bfSize;
  13. unsigned int bfReserved1;
  14. unsigned int bfReserved2;
  15. unsigned long bfOffBits;
  16. } BITMAPFILEHEADER;
  17.  
  18. typedef struct
  19. {
  20. unsigned int biSize;
  21. int biWidth;
  22. int biHeight;
  23. unsigned short biPlanes;
  24. unsigned short biBitCount;
  25. unsigned int biCompression;
  26. unsigned int biSizeImage;
  27. int biXPelsPerMeter;
  28. int biYPelsPerMeter;
  29. unsigned int biClrUsed;
  30. unsigned int biClrImportant;
  31. } BITMAPINFOHEADER;
  32.  
  33. typedef struct
  34. {
  35. int rgbBlue;
  36. int rgbGreen;
  37. int rgbRed;
  38. int rgbReserved;
  39. } RGBQUAD;
  40.  
  41.  
  42. static unsigned short read_u16(FILE *fp);
  43. static unsigned int read_u32(FILE *fp);
  44. static int read_s32(FILE *fp);
  45.  
  46. #endif // MAIN_H_INCLUDEDs
  47. int main()
  48. {
  49. FILE * pFile = fopen("parrot.bmp", "rb");
  50.  
  51. // ñ÷èòûâàåì çàãîëîâîê ôàéëà
  52. BITMAPFILEHEADER header __attribute__((unused));
  53.  
  54. header.bfType = read_u16(pFile);
  55. header.bfSize = read_u32(pFile);
  56. header.bfReserved1 = read_u16(pFile);
  57. header.bfReserved2 = read_u16(pFile);
  58. header.bfOffBits = read_u32(pFile);
  59.  
  60. // ñ÷èòûâàåì çàãîëîâîê èçîáðàæåíèÿ
  61. BITMAPINFOHEADER bmiHeader;
  62.  
  63. bmiHeader.biSize = read_u32(pFile);
  64. bmiHeader.biWidth = read_s32(pFile);
  65. bmiHeader.biHeight = read_s32(pFile);
  66. bmiHeader.biPlanes = read_u16(pFile);
  67. bmiHeader.biBitCount = read_u16(pFile);
  68. bmiHeader.biCompression = read_u32(pFile);
  69. bmiHeader.biSizeImage = read_u32(pFile);
  70. bmiHeader.biXPelsPerMeter = read_s32(pFile);
  71. bmiHeader.biYPelsPerMeter = read_s32(pFile);
  72. bmiHeader.biClrUsed = read_u32(pFile);
  73. bmiHeader.biClrImportant = read_u32(pFile);
  74.  
  75.  
  76. RGBQUAD **rgb = new RGBQUAD*[bmiHeader.biWidth];
  77. for (int i = 0; i < bmiHeader.biWidth; i++) {
  78. rgb[i] = new RGBQUAD[bmiHeader.biHeight];
  79. }
  80.  
  81. for (int i = 0; i < bmiHeader.biWidth; i++) {
  82. for (int j = 0; j < bmiHeader.biHeight; j++) {
  83. rgb[i][j].rgbBlue = getc(pFile);
  84. rgb[i][j].rgbGreen = getc(pFile);
  85. rgb[i][j].rgbRed = getc(pFile);
  86. }
  87.  
  88. // ïðîïóñêàåì ïîñëåäíèé áàéò â ñòðîêå
  89. getc(pFile);
  90. }
  91.  
  92. // âûâîäèì ðåçóëüòàò
  93. for (int i = 0; i < bmiHeader.biWidth; i++) {
  94. for (int j = 0; j < bmiHeader.biHeight; j++) {
  95. printf("%d %d %d\n", rgb[i][j].rgbRed, rgb[i][j].rgbGreen, rgb[i][j].rgbBlue);
  96. }
  97. printf("\n");
  98. }
  99.  
  100. fclose(pFile);
  101. return 0;
  102. }
  103.  
  104.  
  105. static unsigned short read_u16(FILE *fp)
  106. {
  107. unsigned char b0, b1;
  108.  
  109. b0 = getc(fp);
  110. b1 = getc(fp);
  111.  
  112. return ((b1 << 8) | b0);
  113. }
  114.  
  115.  
  116. static unsigned int read_u32(FILE *fp)
  117. {
  118. unsigned char b0, b1, b2, b3;
  119.  
  120. b0 = getc(fp);
  121. b1 = getc(fp);
  122. b2 = getc(fp);
  123. b3 = getc(fp);
  124.  
  125. return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
  126. }
  127.  
  128.  
  129. static int read_s32(FILE *fp)
  130. {
  131. unsigned char b0, b1, b2, b3;
  132.  
  133. b0 = getc(fp);
  134. b1 = getc(fp);
  135. b2 = getc(fp);
  136. b3 = getc(fp);
  137.  
  138. return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement