From 81e24e5601041c39edde5d2d44f29d2985979b80 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 8 Sep 2015 18:17:57 +0200 Subject: [PATCH] =?UTF-8?q?parse/unparse=20fonctionnells=20mais=20tjs=20pb?= =?UTF-8?q?=20avec=20header=5Fcompl=C3=A9mentaire...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/classes.py | 78 ++++++++++++++++++++--------------------------- code/classes.pyc | Bin 7945 -> 7621 bytes 2 files changed, 33 insertions(+), 45 deletions(-) diff --git a/code/classes.py b/code/classes.py index b3bf4ec..078462f 100644 --- a/code/classes.py +++ b/code/classes.py @@ -41,7 +41,7 @@ class BMPHeader: else: parsingData = self.binData - self.binData = parsingData.join("") # header brut (format initial: bin) + self.binData = parsingData # header brut (format initial: bin) self.signature = self.toInt( parsingData[ 0: 2] ) # signature (4D42) self.fileSize = self.toInt( parsingData[ 2: 6] ) # taille du fichier bmp (bytes) @@ -65,10 +65,8 @@ class BMPHeader: self.intData = [] - self.hexData = [] for byte in parsingData: self.intData.append( ord(byte) ) - self.hexData.append( hex( ord(byte) ) ) @@ -76,10 +74,11 @@ class BMPHeader: - # fonction qui créer à partir des attributs + # fonction qui créer à partir des attributs def unparse(self): - self.binData = "" + # on définit le tableau d'entier à partir des attributs + self.intData = [] self.fromInt( self.signature, 2) # signature self.fromInt( self.fileSize, 4) # taille fichier BMP @@ -97,12 +96,10 @@ class BMPHeader: self.fromInt( self.colorNb, 4) # nombre de couleurs de l'image (ou 0) self.fromInt( self.colorINb, 4) # nombre de couleurs importantes de l'image (ou 0) - # human-readable data - self.intData = [] - self.hexData = [] - for byte in self.binData: - self.intData.append( str( ord( byte ) ) ) - self.hexData.append( hex( ord( byte ) ) ) + + self.binData = "" + for byte in self.intData: + self.binData += chr( byte ) # Affiche au format humain, toutes les infos du header @@ -146,25 +143,19 @@ class BMPHeader: intReturn = 0; for i, byte in enumerate(bytes): intReturn += ord(byte) * (256 ** i) - return intReturn - # écrit le valeur entière en octet bourrés jusqu'à la taille + # écrit le valeur entière en octet bourrés jusqu'à la taille dans le tableau def fromInt(self, value, size): s = '0' + str( bin(value)[2:] ) - temp = "" + for byte in range(0, size): + if s=="": + self.intData.append( 0 ) + else: + self.intData.append( int(s[-8:],2) ) + s = s[:-8] - while s != "": - print chr( int(s[:8], 2) ) - temp += chr( int(s[:8], 2) ) - s = s[8:] - print temp - - if size > len(temp): - temp = chr(int('0' * (size-len(temp)), 2) ) + temp - - self.binData += temp @@ -217,10 +208,12 @@ class BMPContent: self.map = self.map[::-1] # on inverse les lignes - self.bin = binContent + self.binData = binContent - for byte in binContent: - self.readableData += str(ord(byte)) + " " + # human-readable data + self.intData = [] + for byte in self.binData: + self.intData.append( ord( byte ) ) # unparse une map de pixels en binaire @@ -255,36 +248,31 @@ class RGBPixel: #################################################### class BMPFile: - # parse à partir du nom du fichier en > objets et - def parse(self, filename): + # parse à partir de en objets et + def parse(self, binFile=""): # si on a défini le fichier - if filename == "": - print "Missing argument 1: filename.bmp" + if binFile == "": + print " need an argument" exit() - # gestion du format - if not ".bmp" in filename[-4:]: - print "must be a .bmp file" - exit() + # human-readable data + self.binData = binFile + self.intData = [] + self.hexData = [] - self.bin = "" - self.readableData = "" - - # lecture du fichier - with open( filename ) as file: - for byte in file.read(): - self.bin += byte; - self.readableData += str(ord(byte)) + " " + for byte in binFile: + self.intData.append( ord(byte) ) + self.hexData.append( hex( ord(byte) ) ) headerSize = 54 # parsing header self.header = BMPHeader() - self.header.parse( self.bin[:headerSize] ) + self.header.parse( self.binData[:headerSize] ) # parsing content self.content = BMPContent() - self.content.parse( self.bin[self.header.offset:], self.header ) + self.content.parse( self.binData[self.header.offset:], self.header ) # unparse à partir d'un et d'un def unparse(self): diff --git a/code/classes.pyc b/code/classes.pyc index 8342d9d7af808db25c10aec0081d4a1880171cf2..92a45499b155be69f50a1ffbe694370adc8f0c37 100644 GIT binary patch delta 2390 zcmZWqO>7%g5T3Vdd%gaNH{RI!a}wu=W`o)gKy4b@rYMAzRuH1CO4UjsO0tV!9Nv7@8SmnN(4~B ziG_d~0pj2!LLe3a65wbd5RU*FILRZR1#5{2k_1N&muL|{2PYK*$q0}FCmjNM1W1FE z34v4u$bgd#fmS+#WWnhQkxT^W0w)&&*$9vW#|VM02w;HI9RfK9f|E2TP-G2O8L&i= z40& zjjx%00%z+xJFe&WDo(fSj=YxmAUln7P%=VS@F$-n##>pjNvjkbaU9H!8>l&QA!G-7 zitNB66%gb$bEJm6P$DX1&r{!I82i5pNz-1{YVU-6Y3tf5WJ;$BDbnczlA}|FwCG%j zgy>Wu6%=SaeIF!2rx~WdQ-z5SR9F<0Faw$=IHiE88iak0O{`{s-wk`5rC9}ycF&0G z4!~850=-eEDWK}E|YkM1jWl9mR}5Ckss$xZAzcWOz7IdS9u}C zL;1B?78?gYn$u$LsK&C;oa7K>f=UlsUlwW__}II&u+ry`_@m3`3h!UHy6BuV3QnEd ztok<7M<*4fXUp~M7s==p3A(RMDfCI$mljs4O?S)grw@|^b3>6m#k0LrWJZM8s(LQ( zwNq_!C{lFU$2b}@@}M{!FzxqZueib|ok7GtNn!*Ahj4>sg=L*xvDg7-GcO{C*|Wfp zb8@loM!by5C-Onxm@z}}^CY;*4atl7mBI`7{SA%=r8=SNntsZjm2>?&6Bo&Hp2P(d z7TqGqYy`lZPS9rm;NTrV==ifJYIfv2N@BvEMeX16!-0_&5odwcP!wE%n*to526Rur zO@2V{p;86=YOod6^d>DLFTzUs1wXJa;4-R+LFy)#Uh@I&BDFk*sH=!}4_4X}wF1qT zY31VTS=bNWXN4+>$_C4gTMc(-t}lE9q5wY@7qEg_;6Y77Eqp++hYY^d zBA1uBD>cS&dVb-Jm8I&IJH4}BZ@AXfeA#ndr@Zc!*Xxx#w_VS#Qt~Y-9s4wifKN2z zurmLcZR4cF0rngTE+5J#`h?-y_I%vTE>U8Sv&R@#F}YxuF)0W=A=JkBxGshg52+GYtgGa$EzC)4B)|G|jLJQA*Jv7ZgC4J}hJ@?($@1ApC_jgae ze>kN76_0%J-=8-_vwAc@M8|Noi<&&8Pj>5qY(ZOsHi#C9ZC#@cjcokuG~NSrAE1+M zc!1#p0%Qk0Am9UnWQRN;=mSF3wZk3~@*!ceO%DkB0F&&92bew}LUz;xB0eBWcFY5! zJ|ISRyz3z`9}*`!;Q?_UkRUth0SOKtK$j$b%Ln=UU|s^`fWpbedg#J^w~bIMz|2ViXdSFvCd zoh@e}134EspDAKs2^hzKsjt-<^5ei_$wg5utltHJ_2+`L`dzW^{XWR4KMX?ZcR@m~tH*fi4&!O+ zoKhkokbamp-6Ex^o*^eoPL4Jd={@S_xjbnFLKJ=A`qMq`nUxo<0oWRoRAb_6xTwrN zOUQHKSN1ZZL|_eKr08!uEo+F~!!TtPkmK7O*NgKqY{q8J;I6$Jh9HQn$chxM2ma}% zFoBM2A2l8{YZtL9~7|nIIYk0G#ruVb8m;$bC$|U`CD#yz}IY zdYnz3jay0i}Ks_s5W_`} z;8MM&37Hxi?V^#uEt+TSa)?@UWCzd-XuvHf2+C&lzeEcQc<`5B#dpZ2A+HUM z3Pau)n(HzX?lIUdVfaF=-L5rON|n~i)zxalDLpn!S(R936gORLQ`7ncXMe{bKu z-DV0`ueP1iQngemv0p`7v+&ngU}bJ3>ku1HbV_M!c%Ndh0Et#BwrW)OSVbsVPq9(l zGwV(WW_hjQV2Z`;-|be1pa0GSs>FO_?T}l;=XP=e9SpW7FyL2oKt%KuTMgXnNu0__ z@v!`7_{&`!F~Om{KSGGBqPxPlE5!7?3hBi{h+}fk=&mR~sKvsu=Aog}^0U#wz^B=h G+35cm)~Qbb