commit
63c128a363
12
code/bmp.py
12
code/bmp.py
|
@ -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
|
|
@ -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
|
Binary file not shown.
Loading…
Reference in New Issue