Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- LodeBMP v1.2.0
- 16-bit, 24-bit & 32-bit Bitmap Decoder/Encoder
- For Windows Compitble Bitmaps.
- */
- #ifndef LODEBMP
- #define LODEBMP
- // <-- C File IO -->
- #include <fstream>
- #define READWORD( Buffer, Offset ) \
- Buffer[ Offset ] & ( Buffer[ Offset + 0x1 ] << 8 )
- #define READDWORD( Buffer, Offset ) \
- Buffer[ Offset ] & ( Buffer[ Offset + 0x1 ] << 8 ) & ( Buffer[ Offset + 0x2 ] << 16 ) & ( Buffer[ Offset + 0x3 ] << 24 )
- // <-- Bitmap File Data Types -->
- typedef bool BOOL;
- typedef const char CBYTE;
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- typedef unsigned long DWORD;
- typedef signed long LONG;
- // Only recognizing two compression types:
- enum Compression {
- Bi_Rgb = 0, Bi_BitFields = 3
- };
- // Read errors for reading bitmaps from a file.
- enum ReadErrors {
- NoError = 0x0, BadFileType = 0x1 , ReadFailed = 0x2, BadBitMasks = 0x4 , WrongBitDepth = 0x8 ,
- WrongCompression = 0x10 , BadBMPHeader = 0x20 , BadDIBHeader = 0x40 , BadImageData = 0x80 , NullImage = 0x100
- };
- struct BITMAPFILEHEADER {
- void* FileHeader[ 0xE ];
- WORD FileType = 0;
- DWORD FileSize = 0;
- WORD ReserveX = 0;
- WORD ReserveY = 0;
- DWORD DataOffset = 0;
- BITMAPFILEHEADER() {
- FileHeader[ 0x0 ] = (&FileType);
- FileHeader[ 0x1 ] = (&FileSize);
- FileHeader[ 0x2 ] = (&ReserveX);
- FileHeader[ 0x3 ] = (&ReserveY);
- FileHeader[ 0x4 ] = (&DataOffset);
- };
- };
- struct BITMAPINFOHEADER {
- void* InfoHeader[ 0xF ];
- DWORD InfoSize = 0;
- LONG ImageWidth = 0;
- LONG ImageHeight = 0;
- WORD ColorPlanes = 0;
- WORD BitDepth = 0;
- DWORD Compression = 0;
- DWORD ImageSizeBytes = 0;
- LONG PxPerMeterX = 0;
- LONG PxPerMeterY = 0;
- DWORD ColorsInPalette = 0;
- DWORD PriorityColorCount = 0;
- DWORD RedBitMask = 0;
- DWORD BlueBitMask = 0;
- DWORD GreenBitMask = 0;
- DWORD AlphaBitMask = 0;
- BITMAPINFOHEADER() {
- InfoHeader[ 0x0 ] = (&InfoSize);
- InfoHeader[ 0x1 ] = (&ImageWidth);
- InfoHeader[ 0x2 ] = (&ImageHeight);
- InfoHeader[ 0x3 ] = (&ColorPlanes);
- InfoHeader[ 0x4 ] = (&BitDepth);
- InfoHeader[ 0x5 ] = (&Compression);
- InfoHeader[ 0x6 ] = (&ImageSizeBytes);
- InfoHeader[ 0x7 ] = (&PxPerMeterX);
- InfoHeader[ 0x8 ] = (&PxPerMeterY);
- InfoHeader[ 0x9 ] = (&ColorsInPalette);
- InfoHeader[ 0xA ] = (&PriorityColorCount);
- InfoHeader[ 0xB ] = (&RedBitMask);
- InfoHeader[ 0xC ] = (&BlueBitMask);
- InfoHeader[ 0xD ] = (&GreenBitMask);
- InfoHeader[ 0xE ] = (&AlphaBitMask);
- };
- };
- struct RGBAQUAD {
- BYTE Red;
- BYTE Green;
- BYTE Blue;
- BYTE Alpha;
- };
- struct BITMAPINFO {
- BITMAPFILEHEADER File;
- BITMAPINFOHEADER Info;
- BYTE* Palette;
- BYTE* Image;
- WORD ERROR;
- BITMAPINFO();
- };
- void lodebmp_import( CBYTE*, BITMAPINFO* );
- void lodebmp_export( CBYTE*, BITMAPINFO* );
- void lodebmp_decode( BITMAPINFO* );
- void lodebmp_encode( BITMAPINFO* );
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement