diff --git a/code/BMPFile.py b/code/BMPFile.py index 591c200..50e78fe 100644 --- a/code/BMPFile.py +++ b/code/BMPFile.py @@ -194,12 +194,12 @@ class BMPContent: for pixel in range(0, header.width): newPixel = RGBPixel() - newPixel.setBin(binContent, i, header.bpp) + newPixel.setBin(binContent, header.width, header.padding, i, header.bpp) self.map[line].append( newPixel ); i += header.bpp / 8.0 # on passe à la suite - i += 8 * header.padding # on saute le padding de saut de ligne + i += header.padding # on saute le padding de saut de ligne self.map = self.map[::-1] # on inverse les lignes @@ -258,7 +258,8 @@ class BMPContent: class RGBPixel: def __init__(self, r=0, g=0, b=0, bpp=24): if bpp not in [1,4,8,24]: - self.bpp = 24 + if not hasattr(self, 'bpp'): # si l'attribut n'est pas déjà défini, alors on met la valeur par défaut + self.bpp = 24 else: self.bpp = bpp @@ -285,7 +286,7 @@ class RGBPixel: def setRGB(self, r, g, b, bpp=24): self.__init__(r, g, b, bpp); - def setBin(self, binData, index, bpp=24): + def setBin(self, binData, width, padding, index, bpp=24): if bpp not in [1,4,8,24]: if not hasattr(self, 'bpp'): # si l'attribut n'est pas déjà défini, alors on met la valeur par défaut self.bpp = 24 @@ -305,6 +306,7 @@ class RGBPixel: bytes = binData[startByte:stopByte+1] + intArray = [ ord(x) for x in bytes ] binArray = [ bin(x)[2:] for x in intArray ] binArray = [ "0"*(8-len(binArray[x])) + binArray[x] for x in range(0, len(binArray)) ] diff --git a/code/Noise.py b/code/Noise.py index a632424..0296ee7 100644 --- a/code/Noise.py +++ b/code/Noise.py @@ -2,4 +2,34 @@ class Noise: - def \ No newline at end of file + def getShape( x, y, map, pixelList ): # return PixelList + width = len( map[0] ) + height = len( map ) + + + # si le pixel existe (pas de dépassement de la map) + if x < width and y < height: + + already = False; + for i in range(0, len(pixelList)): + if pixelList[i] == map[y][x]: + already = True; + break + + # si le pixel n'est pas déjà dans le tableau + if not already: + + pixelList.append( map[y][x] ) # ajout au tableau + + getShape(x-1, y+1, map, pixelList) # 1 + getShape(x, y+1, map, pixelList) # 2 + getShape(x+1, y+1, map, pixelList) # 3 + + getShape(x-1, y, map, pixelList) # 4 + # current pixel + getShape(x+1, y, map, pixelList) # 6 + + getShape(x-1, y-1, map, pixelList) # 7 + getShape(x, y-1, map, pixelList) # 8 + getShape(x+1, y-1, map, pixelList) # 9 + \ No newline at end of file diff --git a/code/Noise.readme b/code/Noise.readme index e58aa74..1f8b893 100644 --- a/code/Noise.readme +++ b/code/Noise.readme @@ -1,5 +1,6 @@ Classes: + /******************/ /** COLORIZATION **/ /******************/ @@ -13,3 +14,47 @@ p = RGBPixel(1,2,3) // couleur actuelle /************ CODE **************/ def colorize(pixel, tint): + + + + +/*****************/ +/** SHAPIZATION **/ +/*****************/ +Principe: récupérer une forme par récurrence + +Ajouter les 8 bits périphériques du pixel courant s'il existe et s'il a des couleurs pas trop éloignées des précédentes +/************ ALGO **************/ + +/************ CODE **************/ +def getShape( x, y, map, pixelList): # return PixelList + width = len( map[0] ) + height = len( map ) + + + # si le pixel existe (pas de dépassement de la map) + if x < width and y < height: + + already = False; + for i in range(0, len(pixelList)): + if pixelList[i] == map[y][x]: + already = True; + break + + # si le pixel n'est pas déjà dans le tableau + if not already: + + pixelList.append( map[y][x] ) # ajout au tableau + + getShape(x-1, y+1, map, pixelList) # 1 + getShape(x, y+1, map, pixelList) # 2 + getShape(x+1, y+1, map, pixelList) # 3 + + getShape(x-1, y, map, pixelList) # 4 + # current pixel + getShape(x+1, y, map, pixelList) # 6 + + getShape(x-1, y-1, map, pixelList) # 7 + getShape(x, y-1, map, pixelList) # 8 + getShape(x+1, y-1, map, pixelList) # 9 + \ No newline at end of file diff --git a/code/bmp.py b/code/bmp.py index b61be32..16f128d 100644 --- a/code/bmp.py +++ b/code/bmp.py @@ -5,6 +5,7 @@ # classes from BMPFile import * +from Noise import * import random import sys diff --git a/code/images/shapes_24.bmp b/code/images/shapes_24.bmp new file mode 100644 index 0000000..0d27e06 Binary files /dev/null and b/code/images/shapes_24.bmp differ diff --git a/code/images/shapes_8.bmp b/code/images/shapes_8.bmp new file mode 100644 index 0000000..aa0dee7 Binary files /dev/null and b/code/images/shapes_8.bmp differ