classe <BMPFile> créée

This commit is contained in:
xdrm-brackets 2015-09-06 19:06:44 +02:00
parent 738458d836
commit 64b0577a02
2 changed files with 39 additions and 12 deletions

View File

@ -8,17 +8,11 @@ from classes import *
import sys import sys
fileData = "" img = BMPFile( sys.argv[1] )
with open(sys.argv[1]) as f:
for byte in f.read():
fileData += byte
headerSize = 54 print img.readableData
header = BMPHeader( fileData[:headerSize] ) for line in img.map:
content = BMPContent( fileData[header.offset:], header )
for line in content.map:
for pixel in line: for pixel in line:
print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b) print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b)
print print

View File

@ -1,5 +1,6 @@
# ~*~ encoding: utf-8 ~*~ # # ~*~ encoding: utf-8 ~*~ #
import sys
################################################# #################################################
# classe qui parse le header (binaire) en objet # # classe qui parse le header (binaire) en objet #
@ -49,15 +50,19 @@ class BMPContent:
# taille avec un padding de 1 # taille avec un padding de 1
correctSizes = [ correctSizes = [
( 0 + header.width * header.bpp/8 ) * header.height,
( 1 + header.width * header.bpp/8 ) * header.height, ( 1 + header.width * header.bpp/8 ) * header.height,
( 2 + 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 # si le fichier a une mauvaise taille donc mauvais format
padding = 0
if not len(binContent) in correctSizes: if not len(binContent) in correctSizes:
print "Mauvais format" print "Mauvais format"
exit exit
elif len(binContent) == correctSizes[0]:
padding = 1
else:
padding = 2
# attribution de la map # attribution de la map
self.map = [] self.map = []
@ -77,7 +82,7 @@ class BMPContent:
i += 3 # on passe à la suite 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 self.map = self.map[::-1] # on inverse les lignes
@ -90,3 +95,31 @@ class RGBPixel:
self.r = r self.r = r
self.g = g self.g = g
self.b = b self.b = b
####################################################
# classe qui parse un fichier BMP complet en objet #
####################################################
class BMPFile:
# CONSTRUCTEUR #
# à partir du fichier <filename>
# parse le header dans une classe <BMPHeader>
# parse le contenu dans une classe <BMPContent>
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