Advertisement
Guest User

LodeBMP.h

a guest
Mar 3rd, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. /*
  2. LodeBMP v1.2.0
  3. 16-bit, 24-bit & 32-bit Bitmap Decoder/Encoder
  4. For Windows Compitble Bitmaps.
  5. */
  6.  
  7. #ifndef LODEBMP
  8. #define LODEBMP
  9. // <-- C File IO -->
  10. #include <fstream>
  11. #define READWORD( Buffer, Offset ) \
  12. Buffer[ Offset ] & ( Buffer[ Offset + 0x1 ] << 8 )
  13. #define READDWORD( Buffer, Offset ) \
  14. Buffer[ Offset ] & ( Buffer[ Offset + 0x1 ] << 8 ) & ( Buffer[ Offset + 0x2 ] << 16 ) & ( Buffer[ Offset + 0x3 ] << 24 )
  15.  
  16. // <-- Bitmap File Data Types -->
  17. typedef bool BOOL;
  18. typedef const char CBYTE;
  19. typedef unsigned char BYTE;
  20. typedef unsigned short WORD;
  21. typedef unsigned long DWORD;
  22. typedef signed long LONG;
  23.  
  24. // Only recognizing two compression types:
  25. enum Compression {
  26. Bi_Rgb = 0, Bi_BitFields = 3
  27. };
  28.  
  29. // Read errors for reading bitmaps from a file.
  30. enum ReadErrors {
  31. NoError = 0x0, BadFileType = 0x1 , ReadFailed = 0x2, BadBitMasks = 0x4 , WrongBitDepth = 0x8 ,
  32. WrongCompression = 0x10 , BadBMPHeader = 0x20 , BadDIBHeader = 0x40 , BadImageData = 0x80 , NullImage = 0x100
  33. };
  34.  
  35. struct BITMAPFILEHEADER {
  36. void* FileHeader[ 0xE ];
  37. WORD FileType = 0;
  38. DWORD FileSize = 0;
  39. WORD ReserveX = 0;
  40. WORD ReserveY = 0;
  41. DWORD DataOffset = 0;
  42.  
  43. BITMAPFILEHEADER() {
  44. FileHeader[ 0x0 ] = (&FileType);
  45. FileHeader[ 0x1 ] = (&FileSize);
  46. FileHeader[ 0x2 ] = (&ReserveX);
  47. FileHeader[ 0x3 ] = (&ReserveY);
  48. FileHeader[ 0x4 ] = (&DataOffset);
  49. };
  50. };
  51.  
  52. struct BITMAPINFOHEADER {
  53.  
  54. void* InfoHeader[ 0xF ];
  55. DWORD InfoSize = 0;
  56. LONG ImageWidth = 0;
  57. LONG ImageHeight = 0;
  58. WORD ColorPlanes = 0;
  59. WORD BitDepth = 0;
  60. DWORD Compression = 0;
  61. DWORD ImageSizeBytes = 0;
  62. LONG PxPerMeterX = 0;
  63. LONG PxPerMeterY = 0;
  64. DWORD ColorsInPalette = 0;
  65. DWORD PriorityColorCount = 0;
  66. DWORD RedBitMask = 0;
  67. DWORD BlueBitMask = 0;
  68. DWORD GreenBitMask = 0;
  69. DWORD AlphaBitMask = 0;
  70.  
  71. BITMAPINFOHEADER() {
  72. InfoHeader[ 0x0 ] = (&InfoSize);
  73. InfoHeader[ 0x1 ] = (&ImageWidth);
  74. InfoHeader[ 0x2 ] = (&ImageHeight);
  75. InfoHeader[ 0x3 ] = (&ColorPlanes);
  76. InfoHeader[ 0x4 ] = (&BitDepth);
  77. InfoHeader[ 0x5 ] = (&Compression);
  78. InfoHeader[ 0x6 ] = (&ImageSizeBytes);
  79. InfoHeader[ 0x7 ] = (&PxPerMeterX);
  80. InfoHeader[ 0x8 ] = (&PxPerMeterY);
  81. InfoHeader[ 0x9 ] = (&ColorsInPalette);
  82. InfoHeader[ 0xA ] = (&PriorityColorCount);
  83. InfoHeader[ 0xB ] = (&RedBitMask);
  84. InfoHeader[ 0xC ] = (&BlueBitMask);
  85. InfoHeader[ 0xD ] = (&GreenBitMask);
  86. InfoHeader[ 0xE ] = (&AlphaBitMask);
  87. };
  88. };
  89.  
  90. struct RGBAQUAD {
  91. BYTE Red;
  92. BYTE Green;
  93. BYTE Blue;
  94. BYTE Alpha;
  95. };
  96.  
  97. struct BITMAPINFO {
  98. BITMAPFILEHEADER File;
  99. BITMAPINFOHEADER Info;
  100. BYTE* Palette;
  101. BYTE* Image;
  102. WORD ERROR;
  103.  
  104. BITMAPINFO();
  105. };
  106.  
  107. void lodebmp_import( CBYTE*, BITMAPINFO* );
  108. void lodebmp_export( CBYTE*, BITMAPINFO* );
  109. void lodebmp_decode( BITMAPINFO* );
  110. void lodebmp_encode( BITMAPINFO* );
  111. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement