1er commit de la prise en charge des différents bpp (classe RGBPixel implémentée)

This commit is contained in:
xdrm-brackets 2015-09-09 18:18:21 +02:00
parent 4b34b3625e
commit 70efbfe5b5
3 changed files with 113 additions and 5 deletions

View File

@ -245,7 +245,7 @@ class BMPContent:
self.binData = "" self.binData = ""
for line in self.map[::-1]: for line in self.map[::-1]:
for pixel in line: for pixel in line:
self.binData += chr(pixel.b) + chr(pixel.g) + chr(pixel.r) self.binData += chr(pixel.binData)
for zero in range(0, headerHandler.padding): for zero in range(0, headerHandler.padding):
self.binData += chr(0) self.binData += chr(0)
@ -258,12 +258,72 @@ class BMPContent:
# classe contenant un pixel RGB # # classe contenant un pixel RGB #
################################# #################################
class RGBPixel: class RGBPixel:
def __init__(self, r, g, b): def __init__(self, r, g, b, bpp=24):
if bpp not in [1,4,8,24]:
self.bpp = 24
else:
self.bpp = bpp
self.r = r self.r = r
self.g = g self.g = g
self.b = b self.b = b
# gestion des différents bpp
if bpp == 1:
self.intData = [ int( (r+g+b)/3 > 256/2 ) ]
self.binData = chr( self.intData )
elif bpp == 4:
self.intData = [ int( 16 * ((r+g+b)/3) / 256 ) ]
self.binData = chr( self.intData )
elif bpp == 8:
self.intData = [ int( (r+g+b) / 3 ) ]
self.binData = chr( self.intData )
else:
self.intData = [ r, g, b ]
self.binData = chr(b) + chr(g) + chr(r)
def setRGB(self, r, g, b, bpp=24):
self.__init__(r, g, b, bpp);
def setBin(self, binData, bpp=24):
if bpp not in [1,4,8,24]:
self.bpp = 24
else:
self.bpp = bpp
# gestion des différents bpp
if bpp == 1:
self.intData = [ 255 * int(binData) ]
self.r = self.intData[0]
self.g = self.intData[0]
self.b = self.intData[0]
elif bpp == 4:
self.intData = [ 256 * ord(binData) / 16 ]
self.r = self.intData[0]
self.g = self.intData[0]
self.b = self.intData[0]
elif bpp == 8:
self.intData = [ ord(binData) ]
self.r = self.intData[0]
self.g = self.intData[0]
self.b = self.intData[0]
else:
self.intData = [ ord(binData[2]), ord(binData[1]), ord(binData[0]) ]
self.r = self.intData[0]
self.g = self.intData[1]
self.b = self.intData[2]
self.r = r
self.g = g
self.b = b
#################################################### ####################################################
# classe qui parse un fichier BMP complet en objet # # classe qui parse un fichier BMP complet en objet #

View File

@ -146,3 +146,51 @@ Classes:
[x] gestion de la palette (attribut au <parse>) définit par défaut au <unparse> [x] gestion de la palette (attribut au <parse>) définit par défaut au <unparse>
[x] faire que le unparse du content créée le header [x] faire que le unparse du content créée le header
[ ] prise en charge des formats 1, 4, et 8 bpp [ ] prise en charge des formats 1, 4, et 8 bpp
#######################################################################
####### RECHERCHE DE PRISE EN CHARGE DES DIFFERENTS FORMATS BPP #######
#######################################################################
PixelColor(r, g, b, bpp=24)
<r>, <g>, <b> respectivement les composantes bleue, rouge, verte
<bpp> correspond aux bpp
CAS BPP=1 (noir et blanc)
(r+g+b)/3 >= 256 / 2
1 - blanc
2 - noir
CAS BPP=4 (niveaux de gris)
16 * ((r+g+b)/3) / 256
CAS BPP=8
(r+g+b) / 3
class PixelColor(r, g, b, bpp=24):
if bpp not in [1,4,8,24]:
self.bpp = 24
else:
self.bpp = bpp
self.r = r
self.g = g
self.b = b
# gestion des différents bpp
if bpp == 1:
self.intColor = int( (r+g+b)/3 > 256/2 )
self.binColor = chr( self.intColor )
elif bpp == 4:
self.intColor = int( 16 * ((r+g+b)/3) / 256 ) )
self.binColor = chr( self.intColor )
elif bpp == 8:
self.intColor = int( (r+g+b) / 3 )
self.binColor = chr( self.intColor )
else:
self.intColor = [r, g, b]
self.binColor = chr(b) + chr(g) + chr(r)

View File

@ -48,7 +48,7 @@ def testManualCreation():
for y in range(0, 100): for y in range(0, 100):
img.content.map.append( [] ) img.content.map.append( [] )
for x in range(0, 1000): for x in range(0, 1000):
img.content.map[y].append( PixelColor( img.content.map[y].append( RGBPixel(
random.randint(0, 255), random.randint(0, 255),
random.randint(0, 255), random.randint(0, 255),
random.randint(0, 255) random.randint(0, 255)
@ -59,5 +59,5 @@ def testManualCreation():
print img.binData print img.binData
# MAIN # MAIN
#testManualCreation() testManualCreation()
testFileIntegrity() #testFileIntegrity()