⚠️ Warning: This is a draft ⚠️
This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.
If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.
{{collection|Basic bitmap storage}}
Translation of [[Basic bitmap storage#Ada|Ada]] (well, roughly)
{{works with|python|2.4}}
import sys # for stdout
class c_color(object):
def __init__(self, p_r = 0, p_g = 0, p_b = 0):
self.put(p_r, p_g, p_b)
def clone(self):
return c_color(self.r, self.g, self.b)
def put(self, p_r, p_g, p_b):
self.r = p_r
self.g = p_g
self.b = p_b
def get_r(self):
return self.r
def get_g(self):
return self.g
def get_b(self):
return self.b
def __eq__(self, other):
return self.r == other.r and self.g == other.g and self.b == other.b
def __ne__(self, other):
return not (self == other)
black = c_color(0,0,0)
white = c_color(255,255,255)
class c_bitmap_store(object):
def __init__(self, p_width = 80, p_height = 40):
self.instructions = ''
self.width = p_width
self.height = p_height
self.pixels = [[white.clone() for x in range(self.width)] for y in range(self.height)]
def fill(self, x, y, w, h, color):
for I in range(w):
for J in range(h):
self.put(x+I, y+J, color)
def display(self):
for J in range(self.height):
for I in range(self.width):
if self.get(i,j) == white:
sys.stdout.write(" ")
else:
sys.stdout.write("H")
print
def put(self, x,y, color):
assert type(color) is c_color
self.pixels[y][x] = color
def get(self, x,y):
result = self.pixels[y][x]
assert type(result) is c_color
return result
Alternative version
{{works with|Python|3.1}}
This makes use of named tuples and may well work with Python 2.6+ too.
from collections import namedtuple
from copy import copy
Colour = namedtuple('Colour','r,g,b')
Colour.copy = lambda self: copy(self)
black = Colour(0,0,0)
white = Colour(255,255,255) # Colour ranges are not enforced.
class Bitmap():
def __init__(self, width = 40, height = 40, background=white):
assert width > 0 and height > 0 and type(background) == Colour
self.width = width
self.height = height
self.background = background
self.map = [[background.copy() for w in range(width)] for h in range(height)]
def fillrect(self, x, y, width, height, colour=black):
assert x >= 0 and y >= 0 and width > 0 and height > 0 and type(colour) == Colour
for h in range(height):
for w in range(width):
self.map[y+h][x+w] = colour.copy()
def chardisplay(self):
txt = [''.join(' ' if bit==self.background else '@'
for bit in row)
for row in self.map]
# Boxing
txt = ['|'+row+'|' for row in txt]
txt.insert(0, '+' + '-' * self.width + '+')
txt.append('+' + '-' * self.width + '+')
print('\n'.join(reversed(txt)))
def set(self, x, y, colour=black):
assert type(colour) == Colour
self.map[y][x]=colour
def get(self, x, y):
return self.map[y][x]
bitmap = Bitmap(20,10)
bitmap.fillrect(4, 5, 6, 3)
assert bitmap.get(5, 5) == black
assert bitmap.get(0, 1) == white
bitmap.set(0, 1, black)
assert bitmap.get(0, 1) == black
bitmap.chardisplay()
'''
The origin, 0,0; is the lower left, with x increasing to the right,
and Y increasing upwards.
The program above produces the following display :
+--------------------+
| |
| |
| @@@@@@ |
| @@@@@@ |
| @@@@@@ |
| |
| |
| |
|@ |
| |
+--------------------+
'''