diff --git a/code/bmp.py b/code/bmp.py index 56462a6..ebd1443 100644 --- a/code/bmp.py +++ b/code/bmp.py @@ -8,24 +8,32 @@ from classes import * import sys +# lecture du fichier +with open( sys.argv[1] ) as file: + binFile = file.read() + +# Instanciation du BMPFile img = BMPFile() -img.parse( sys.argv[1] ); - - -### print header human-readable data ### -#print img.header.info() - -### print file human-readable data ### -#print img.intData - -### print header human-readable data ### -#print img.header.intData - -### print content human-readable data ### -#print img.content.intData + +# Parsing +img.parse( binFile ); +# MODIFICATIONS des pixels for line in img.content.map: for pixel in line: - print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b) - print \ No newline at end of file + pixel.r = 255 + pixel.g = 75 + pixel.b = 255 + + +# Unparsing +img.unparse() + + +print img.binData + +# for line in img.content.map: +# for pixel in line: +# print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b) +# print \ No newline at end of file diff --git a/code/bmp.readme b/code/bmp.readme index 65c5181..3cd7457 100644 --- a/code/bmp.readme +++ b/code/bmp.readme @@ -85,15 +85,13 @@ Classes: /***************/ /* ATTRIBUTS */ /***************/ - * CONTENU BRUT HEADER COMPLETS (début jusqu'aux pixels) - - header format binaire (0 à offset) - - header format list de (0-255) - - header format liste de (0x00 - 0xFF) + * CONTENU PALETTE (fin du header jusqu'aux pixels) + - palette format binaire (header à offset) + - palette format list de (0-255) * CONTENU BRUT - contenu complet brut (binaire) - contenu complet format liste de (0-255) - - contenu complet format liste de (0x00 - 0xFF) * CONTENU STRUCTURE -
objet de type @@ -106,8 +104,8 @@ Classes: parse(binFile=""): Définit les attributs à partir de ou de l'argument si défini - unparse(header="", content=""): - Définit à partir d'un
et d'un + unparse(): + Définit à partir des attributs et diff --git a/code/classes.py b/code/classes.py index 078462f..cef9483 100644 --- a/code/classes.py +++ b/code/classes.py @@ -58,7 +58,7 @@ class BMPHeader: self.vertRes = self.toInt( parsingData[42:46] ) # résolution verticale (pixels) self.colorNb = self.toInt( parsingData[46:50] ) # nombre de couleurs de l'image (ou 0) self.colorINb = self.toInt( parsingData[50:54] ) # nombre de couleurs importantes de l'images (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) @@ -69,11 +69,6 @@ class BMPHeader: self.intData.append( ord(byte) ) - - - - - # fonction qui créer à partir des attributs def unparse(self): @@ -95,7 +90,7 @@ class BMPHeader: self.fromInt( self.vertRes, 4) # résolution verticale 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) - + self.binData = "" for byte in self.intData: @@ -213,7 +208,7 @@ class BMPContent: # human-readable data self.intData = [] for byte in self.binData: - self.intData.append( ord( byte ) ) + self.intData.append( ord( byte ) ) # unparse une map de pixels en binaire @@ -223,13 +218,18 @@ class BMPContent: height = len( map ) # nb de lignes = taille 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 - - self.bin = "" + + + self.binData = "" for line in self.map[::-1]: for pixel in line: - self.bin += chr(pixel.b) + chr(pixel.g) + chr(pixel.r) + self.binData += chr(pixel.b) + chr(pixel.g) + chr(pixel.r) for zero in range(0, padding): - self.bin += chr(0) + self.binData += chr(0) + + self.intData = [] + for byte in self.binData: + self.intData.append( ord(byte) ) ################################# @@ -258,11 +258,9 @@ class BMPFile: # human-readable data self.binData = binFile self.intData = [] - self.hexData = [] for byte in binFile: - self.intData.append( ord(byte) ) - self.hexData.append( hex( ord(byte) ) ) + self.intData.append( ord(byte) ) headerSize = 54 @@ -274,7 +272,28 @@ class BMPFile: self.content = BMPContent() self.content.parse( self.binData[self.header.offset:], self.header ) + # création de la pallette (header complémentaire=définition des couleurs+codage) + self.binPalette = self.binData[54:self.header.offset] + self.intPalette = [] + for byte in self.binPalette: + self.intPalette.append( ord(byte) ) + # unparse à partir d'un et d'un def unparse(self): - print "To Do !" - print "implement unparse function" + # on définit la palette par défaut + self.intPalette = [66, 71, 82, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + + self.binPalette = "" + for byte in self.intPalette: + self.binPalette += chr(byte) + + # on déparse les classes utilisées + self.content.unparse( self.content.map ) + self.header.unparse() + + # on enregistre le contenu brut binaire du fichier complet + self.binData = "%s%s%s" % (self.header.binData, self.binPalette, self.content.binData) + + self.intData = [] + for byte in self.binData: + self.intData.append( ord(byte) ) \ No newline at end of file diff --git a/code/classes.pyc b/code/classes.pyc new file mode 100644 index 0000000..d1baa73 Binary files /dev/null and b/code/classes.pyc differ diff --git a/code/overwrite.py b/code/overwrite.py deleted file mode 100644 index a381114..0000000 --- a/code/overwrite.py +++ /dev/null @@ -1,50 +0,0 @@ -# ~*~ encoding: utf-8 ~*~ # -########################### -# TRAITEMENT D'IMAGES # -########################### - -# classes -from classes import * - -import sys - -# lecture du fichier -binFile = "" -with open( sys.argv[1] ) as file: - for byte in file.read(): - binFile += byte; - -img = BMPFile() -img.parse( binFile ); - - -### 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.header.binData + img.content.binData - -img.content.unparse( img.content.map ) -img.header.unparse() - - -print img.header.binData + img.content.binData - - - -#print img.hexData - - -#for line in img.content.map: -# for pixel in line: -# print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b) -# print \ No newline at end of file