1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| // Extrait les infos des deux headers à partir des données brutes (Data) du fichier.
bool ClassBMPHeaders::Read(unsigned char *Data)
{
if(Data==NULL || (Data[0x0]!='B')) return false; // Si il n'y a pas de données, ou si les données de proviennent pas d'un BMP.
if(Data[0x1]!='M') m_isWinBmp = false; // Si Data ne commence pas par "BM", c'est un Bitmap OS/2.
// BITMAPFILEHEADER
strncpy(m_Type,(char *)Data,2); m_Type[2]='\0'; // Construction de m_Type sur les 2 premiers octets, plus le "\0".
memcpy(&m_FileSize,&Data[0x2],4); // Extraction de m_FileSize sur les 4 octets suivants.
memcpy(&m_Reserved,&Data[0x6],4); // Extraction de m_Reserved sur les 4 octets suivants.
memcpy(&m_OffBits,&Data[0xA],4); // Extraction de m_OffBits qur les 4 octets qui suivent.
m_FileHeaderSize = 0x0C; // Taille de la structure BITMAPFILEHEADER : 2+4+4+4 = 14 octets = 0x0C (en base 8).
// BITMAPINFOHEADER
memcpy(&m_InfoHeaderSize,&Data[0xE],4); // Extraction de m_InfoHeaderSize.
if ((m_InfoHeaderSize!=0x28)
&&(m_InfoHeaderSize!=0x0C)
&&(m_InfoHeaderSize!=0xF0)) return false; // Si m_InfoHeaderSize est incorrect (cf. doc. pour les valeurs).
memcpy(&m_Width,&Data[0x12],4); // Extraction de m_Width sur les 4 octets suivants.
memcpy(&m_Height,&Data[0x16],4); // Extraction de m_Height sur les 4 octets suivants.
memcpy(&m_Planes,&Data[0x1A],2); // Extraction de m_Planes sur les 2 octets suivants.
if (m_Planes!=0x01) return false; // Si m_Planes est incorrect (il doit être égale à 01, d'aprés la doc.).
memcpy(&m_BitCount,&Data[0x1C],2); // Extraction de m_BitCount sur les 2 octets suivants.
memcpy(&m_Compression,&Data[0x1E],4); // Extraction de m_Compression sur les 4 octets suivants.
memcpy(&m_ImageSize,&Data[0x22],4); // Extraction de m_ImageSize sur les 4 octets suivants.
memcpy(&m_XPelsPerMeter,&Data[0x26],4); // Extraction de m_XPelsPerMeter sur les 4 octets suivants.
memcpy(&m_YPelsPerMeter,&Data[0x2A],4); // Extraction de m_YPelsPerMeter sur les 4 octets suivants.
memcpy(&m_ColorUsed,&Data[0x2E],4); // Extraction de m_ColorUsed sur les 4 octets suivants.
memcpy(&m_ColorImportant,&Data[0x32],4); // Extraction de m_ColorImportant sur les 4 octets suivants.
return true;
} |
Partager