Padding corrigé

This commit is contained in:
xdrm-brackets 2015-09-07 16:16:37 +02:00
parent 9210ece885
commit 82107726e8
2 changed files with 14 additions and 8 deletions

View File

@ -25,6 +25,9 @@ class BMPHeader:
self.colorNb = 0; # nombre de couleurs de l'image (ou 0) self.colorNb = 0; # nombre de couleurs de l'image (ou 0)
self.colorINb = 0; # nombre d'images importantes (ou 0) self.colorINb = 0; # nombre d'images importantes (ou 0)
self.rowSize = 0; # longueur réelle d'une ligne
self.padding = 0; # bourrage de fin de ligne (nb de bytes)
# convertit les octets <bytes> en entier # convertit les octets <bytes> en entier
def toInt(self, bytes): def toInt(self, bytes):
intReturn = 0; intReturn = 0;
@ -50,11 +53,15 @@ class BMPHeader:
self.colorNb = self.toInt(binHeader[46:50]) # nombre de couleurs de l'image (ou 0) self.colorNb = self.toInt(binHeader[46:50]) # nombre de couleurs de l'image (ou 0)
self.colorINb = self.toInt(binHeader[50:54]) # nombre d'images importantes (ou 0) self.colorINb = self.toInt(binHeader[50:54]) # nombre d'images importantes (ou 0)
# calculated values
self.rowSize = self.size / self.height # taille réelle d'une ligne (+padding)
self.padding = self.rowSize - self.width*self.bpp/8 # bourrage (nb de bytes)
self.readableData = "" self.readableData = ""
for byte in binHeader: for byte in binHeader:
self.readableData += str(ord(byte)) + " " self.readableData += str(ord(byte)) + " "
# Affiche au format humain, toutes les infos du header # Affiche au format humain, toutes les infos du header
def info(self): def info(self):
print print
@ -77,7 +84,8 @@ class BMPHeader:
print "=====================" print "====================="
print "INFORMATIONS COMP." print "INFORMATIONS COMP."
print "=====================" print "====================="
print "padding: %s" % ( (4- self.width*3 %4)%4 ) print "rowsize: %s" % ( hex(self.rowSize ) )
print "rowEncoded: %s" % ( hex(self.padding ) )
print "=====================" print "====================="
print print
@ -102,8 +110,7 @@ class BMPContent:
exit() exit()
# taille avec un padding de 1 # taille avec un padding de 1
padding = ( 4 - header.width*3 % 4 ) % 4 correctSize = header.rowSize * header.height;
correctSize = header.width * ( padding + header.bpp/8 ) * header.height;
# si le fichier a une mauvaise taille donc mauvais format # si le fichier a une mauvaise taille donc mauvais format
if not len(binContent) == correctSize: if not len(binContent) == correctSize:
@ -128,7 +135,7 @@ class BMPContent:
i += 3 # on passe à la suite i += 3 # on passe à la suite
i += padding # on saute le padding de saut de ligne i += header.padding # on saute le padding de saut de ligne
self.map = self.map[::-1] # on inverse les lignes self.map = self.map[::-1] # on inverse les lignes
@ -146,7 +153,6 @@ class BMPContent:
width = len( map[0] ) # nb de colonnes = taille des lignes de la map width = len( map[0] ) # nb de colonnes = taille des lignes de la map
padding = ( 4 - width*3 % 4 ) % 4 # padding de bourrage de lignes padding = ( 4 - width*3 % 4 ) % 4 # padding de bourrage de lignes
self.bin = "" self.bin = ""
for line in self.map[::-1]: for line in self.map[::-1]:
for pixel in line: for pixel in line:

Binary file not shown.