diff --git a/code/bmp.py b/code/bmp.py index cd96659..e3b73e7 100644 --- a/code/bmp.py +++ b/code/bmp.py @@ -8,17 +8,11 @@ from classes import * import sys -fileData = "" -with open(sys.argv[1]) as f: - for byte in f.read(): - fileData += byte +img = BMPFile( sys.argv[1] ) -headerSize = 54 +print img.readableData -header = BMPHeader( fileData[:headerSize] ) -content = BMPContent( fileData[header.offset:], header ) - -for line in content.map: +for line in img.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/classes.py b/code/classes.py index 9d04d41..3162fb8 100644 --- a/code/classes.py +++ b/code/classes.py @@ -1,5 +1,6 @@ # ~*~ encoding: utf-8 ~*~ # +import sys ################################################# # classe qui parse le header (binaire) en objet # @@ -49,15 +50,19 @@ class BMPContent: # taille avec un padding de 1 correctSizes = [ - ( 0 + header.width * header.bpp/8 ) * header.height, ( 1 + header.width * header.bpp/8 ) * header.height, ( 2 + header.width * header.bpp/8 ) * header.height ] # si le fichier a une mauvaise taille donc mauvais format + padding = 0 if not len(binContent) in correctSizes: print "Mauvais format" exit + elif len(binContent) == correctSizes[0]: + padding = 1 + else: + padding = 2 # attribution de la map self.map = [] @@ -77,7 +82,7 @@ class BMPContent: i += 3 # on passe à la suite - i += 2 # on saute le padding de saut de ligne + i += padding # on saute le padding de saut de ligne self.map = self.map[::-1] # on inverse les lignes @@ -89,4 +94,32 @@ class RGBPixel: def __init__(self, r, g, b): self.r = r self.g = g - self.b = b \ No newline at end of file + self.b = b + + + +#################################################### +# 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): + # gestion du format + if not ".bmp" in filename[-4:]: + print "must be a .bmp file" + exit + + self.fileData = "" + self.readableData = "" + with open(sys.argv[1]) as file: + for byte in file.read(): + self.fileData += byte; + self.readableData += str(ord(byte)) + " " + + headerSize = 54 + self.header = BMPHeader ( self.fileData[:headerSize] ) + self.content = BMPContent( self.fileData[self.header.offset:], self.header ) + self.map = self.content.map # lien \ No newline at end of file diff --git a/code/classes.pyc b/code/classes.pyc new file mode 100644 index 0000000..8257713 Binary files /dev/null and b/code/classes.pyc differ