Merge pull request #1 from xdrm-brackets/bmpclass

Bmpclass
This commit is contained in:
xdrm 2015-09-06 19:10:03 +02:00
commit 63c128a363
3 changed files with 39 additions and 12 deletions

View File

@ -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

View File

@ -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
@ -90,3 +95,31 @@ class RGBPixel:
self.r = r
self.g = g
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

BIN
code/classes.pyc Normal file

Binary file not shown.