From 5bffb65914be3564ae329a15c70321792e5e635b Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 6 Sep 2015 23:34:26 +0200 Subject: [PATCH] Structure refaite (parse hors des constructeurs) --- code/bmp.py | 16 ++++++++-- code/classes.py | 75 +++++++++++++++++++++++++++++++++-------------- code/classes.pyc | Bin 4979 -> 5648 bytes 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/code/bmp.py b/code/bmp.py index 5cb79cb..d424d54 100644 --- a/code/bmp.py +++ b/code/bmp.py @@ -8,11 +8,21 @@ from classes import * import sys -img = BMPFile( sys.argv[1] ) +img = BMPFile() +img.parse( sys.argv[1] ); -print img.header.info() +### print header human-readable data ### +#print img.header.info() + +### print file human-readable data ### +#print img.readableData + +### print header human-readable data ### +#print img.header.readableData + +### print content human-readable data ### +#print img.content.readableData -print img.readableData for line in img.content.map: for pixel in line: diff --git a/code/classes.py b/code/classes.py index 80fadf2..3c7ccb6 100644 --- a/code/classes.py +++ b/code/classes.py @@ -29,12 +29,12 @@ class BMPHeader: def toInt(self, bytes): intReturn = 0; for i, byte in enumerate(bytes): - intReturn += ord(byte) * (256 ** i) + intReturn += ord(byte) * (256 ** i) return intReturn # parse le header au format bin en objet def parse(self, binHeader): - self.header = binHeader # header brut (format initial: bin) + self.bin = binHeader # header brut (format initial: bin) self.signature = self.toInt(binHeader[ 0: 2]) # signature (4D42) self.fileSize = self.toInt(binHeader[ 2: 6]) # taille du fichier bmp (bytes) self.offset = self.toInt(binHeader[10:14]) # début de l'image (bytes) @@ -49,10 +49,15 @@ class BMPHeader: self.vertRes = self.toInt(binHeader[42:46]) # résolution verticale (pixels) 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.readableData = "" + for byte in binHeader: + self.readableData += str(ord(byte)) + " " # Affiche au format humain, toutes les infos du header def info(self): + print print "INFORMATION DU HEADER" print "=====================" print "signature: %s" % ( hex(self.signature) ) @@ -77,13 +82,19 @@ class BMPHeader: #################################################### class BMPContent: - # CONSTRUCTEUR: parse le content (bin) avec les informations: + # CONSTRUCTEUR: instancie les attribus + def __init__(self): + self.map = [] + self.bin = "" + self.readableData = "" + + # parse le content (bin) avec les informations: #
BMPHeader de l'image en question - def __init__(self, binContent, header): + def parse(self, binContent, header): # gestion du bpp if( header.bpp != 24 ): - print "ne prends pas en charge les versions autre que bmp24"; - exit + print "Ne prends pas en charge les versions autre que bmp24"; + exit() # taille avec un padding de 1 correctSizes = [ @@ -94,8 +105,8 @@ class BMPContent: # si le fichier a une mauvaise taille donc mauvais format padding = 0 if not len(binContent) in correctSizes: - print "Mauvais format" - exit + print "Mauvais format (erreur de taille)" + exit() elif len(binContent) == correctSizes[0]: padding = 1 else: @@ -120,9 +131,14 @@ class BMPContent: i += 3 # on passe à la suite i += padding # on saute le padding de saut de ligne - + self.map = self.map[::-1] # on inverse les lignes - + + self.bin = binContent + + for byte in binContent: + self.readableData += str(ord(byte)) + " " + ################################# # classe contenant un pixel RGB # @@ -139,24 +155,39 @@ class RGBPixel: # classe qui parse un fichier BMP complet en objet # #################################################### class BMPFile: - # CONSTRUCTEUR # - # à partir du fichier - # parse le header dans une classe - # parse le contenu dans une classe - def __init__(self, filename): + + # parse à partir du nom du fichier en > objets et + def parse(self, filename): + # si on a défini le fichier + if filename == "": + print "Missing argument 1: filename.bmp" + exit() + # gestion du format if not ".bmp" in filename[-4:]: print "must be a .bmp file" - exit - - self.fileData = "" + exit() + + self.bin = "" self.readableData = "" - with open(sys.argv[1]) as file: + + # lecture du fichier + with open( filename ) as file: for byte in file.read(): - self.fileData += byte; + self.bin += byte; self.readableData += str(hex(ord(byte))) + " " headerSize = 54 + + # parsing header self.header = BMPHeader() - self.header.parse( self.fileData[:headerSize] ) - self.content = BMPContent( self.fileData[self.header.offset:], self.header ) \ No newline at end of file + self.header.parse( self.bin[:headerSize] ) + + # parsing content + self.content = BMPContent() + self.content.parse( self.bin[self.header.offset:], self.header ) + + # unparse à partir d'un et d'un + def unparse(self): + print "To Do !" + print "implement unparse function" \ No newline at end of file diff --git a/code/classes.pyc b/code/classes.pyc index fcd12a6747ac054d3fd76c86befd40d66a4be770..e6f2d3c84e51e66a0e7f19eb29a7a4bdca5abe42 100644 GIT binary patch delta 1578 zcma)6&2Jk;6o0epU1z=P_)FAvli+olrVFBlQq)#KlmiK|Xq$#fMGCY;8+#Kr@mF@o z5F|%FgaZ->5F_#KAPW4ZzuF3B zec`LsSVWv$J#yuFRKh}qL3MNuB3_pH(z|le9A#5-#jH(KG>c_fgEk?dFm;Opj_P|4 z%ujUZO`MCTQ2}G}U+cD6MU&U0U3yPG%)G$LaxYUGp25ig;3K>az?W!f&}7QcfiHO) zE+6ee1GNifS_f4rAa^PmCP)lSK(!#}1ztg|E~T#7_IrE`XZScx)4}BRMpS|firVuRbjQ+fs0}xDh+c%I2J>|+^e)IV_J__cG}A{D1G~b0k`L@( zbNjG7Fkp~^t2+j4{UJYg#ugA-I&+-BekKWw#vmqNN$_#gf_72eCrzn!xN zKZmv)&z>(FSBFo~x+Ukbw>5?ST#ZxN@1w-mP=S_X2Fs+z*<{LOMY82T+3GklL(4KR zg&us8)LBvmQdPpf%%{*^LW#-8)U7ms84dYo?tqxpeLT60k@B}&u zO_S_$m|HX`!FTdW&U-FC5j6}Hs-wbogs@cv+SDK#I{+3CSYRClTvw|psBWeqnt`T4 zFdr|UAm9YSs!_{fKJ3wNIQ8##T~Q|`xAT)}1B3}8Eq~0Hho8bSb?*CjkvTgl5Qup~ zYs4R5!-9>BGH{0!xR{R#`_RQvE6xd*Bq9sdBz9K=hRK(_5xi&83bBjktuT(m&bsSI zr`G%Jpd;K%Gwxd03Oar}xVYNx$y0^tp(03l1^vBIRGd2bm>z<#>-I3140=x#VYo|P z^pbEC;M8J@HVSl+#$lt|5g5iP&Lb3(=Z4OBcm~QT|0>)Y65)P8i3w`Z93q*XCymdK zrRP|Q<=Cs5sXMHUa`aHpwhCA}IX(;Xb=9g(Du#|z3o)JKPS>67y0w@(A#C?rfvQEn z)AOS^aM${sbVG#QjtBC4Yw;pQ9IX9@rXnxkQJ!Twote)N(~JBv+7Az%k?B?Wv{Gy=qcFvS*9G$d7sih`;d)qAKY=|Uk8>Pq7JV3UegI3iISra-5LpdCRCjfy7a zs*>u@)ThMTv)^g4VNgS-$)-V@?=d2(7*s@Bd{NrfCGe08s<=ZR1niGLlUY1MYzlc<)F%Amzt997D7QyHPtq-ZBY>6=7L~Y z(E6ZU=cHVcv^h_Ui_mBO8bogD6vX&Pc#}ADB~Fz@Xy8;j;@Rt8NbU4;G zO0`gW|DKOOCi3bxw?c!Lwq}C5+k+W5%LKHpncGe1GMANfIWVw5E9