Dans une série d'articles précédents nous te présentions img2calc, notre service en ligne gratuit sur TI-Planet te permettant de convertir facilement et rapidement tes images pour tes projets sur calculatrices.
Un large choix de formats cible t'était proposé :
Un large choix de formats cible t'était proposé :
- fichiers à appeler depuis tes programmes en langage Basic :
- .g3p pour Casio Graph 90+E et fx-CG50/20/10
- .c2p pour Casio fx-CP400 et fx-CG500
- .8ca ou .8ci pour TI-82 Advanced Edition Python, TI-83 Premium CE, TI-84 Plus CE et TI-84 Plus C Silver Edition
- .8xi pour TI-83 Plus (compatible TI-82 Plus, TI-82 Advanced monochrome et TI-84 monochrome),
- .83i pour TI-83 (compatible TI-82 Stats et TI-76.fr)
- .82i pour TI-82
- .86i pour TI-86
- .85i pour TI-85
- .73i pour TI-73
- fichiers à appeler depuis tes scripts en langage Python :
- IM8C.8xv pour les éditions Python des TI-83 Premium CE et TI-84 Plus CE
- scripts Python pour les différentes bibliothèques de tracé par pixels disponibles selon les modèles :
- ti_draw (TI-Nspire CX II)
- graphic (TI-Nspire CX II avec KhiCAS, TI-Nspire CX avec KhiCAS, NumWorks avec KhiCAS, Casio Graph 90+E et fx-CG50 avec KhiCAS)
- nsp (TI-Nspire avec Micropython)
- ti_graphics (TI-83 Premium CE et TI-84 Plus CE éditions Python)
- casioplot (Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50)
- hpprime (HP Prime)
- kandinsky (NumWorks)
Aujourd'hui, parlons donc de la conversion d'images en scripts Python par img2calc.
Le code des scripts obtenus se compose de 3 éléments :
Le code des scripts obtenus se compose de 3 éléments :
- une fonction affichant une image
- les données de l'image
- la palette de couleurs associées
- Code: Select all
#image converted on TI-Planet
#tiplanet.org/img2calc
#the image drawing function
#- rle : image RLE-compressed data
#- w : width of image
#- pal : palette of colors to use with image
#- zoomx : horizontal zoom
#- zoomy : vertical zoom
#- itransp : index of 1 transparent color in palette or -1 if none
def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
i, x = 0, 0
x0, y0 = int(x0), int(y0)
nvals = len(pal)
nbits = 0
nvals -= 1
while(nvals):
nvals >>= 1
nbits += 1
maskval = (1 << nbits) - 1
maskcnt = (0xFF >> nbits >> 1) << nbits
while i<len(rle):
v = rle[i]
mv = v & maskval
c = (v & maskcnt) >> nbits
if (v & 0b10000000 or nbits == 8):
i += 1
c |= rle[i] << (7 - nbits + (nbits == 8))
c = c + 1
while c:
cw = min(c, w - x)
if mv != itransp:
col = pal[mv]
for l in range(0, zoomy, zoomy < 0 and -1 or 1):
for k in range(cw):
for p in range(0, zoomx, zoomx < 0 and -1 or 1):
set_pixel(x0 + (x + k)*zoomx + p - (zoomx < 0), y0 + l - (zoomy < 0), col)
c -= cw
x = (x + cw) % w
y0 += x == 0 and zoomy
i += 1
#palette for your image
#12 RGB-888 colors
palette = (
(0,0,0),(104,40,120),(136,112,80),(80,192,0),(248,132,24),(160,168,160),(248,252,0),(0,252,248),(248,0,0),(248,252,248),(248,172,176),(0,0,248),
)
#your image data
#160x154 RLE-4 pixels
image = (
b'P\x81\1P\x81\6\xf0\0\1\0\1\20\1\x90\3QP\2\23\1\0\21\xa0\1\xf1\0\0\1\xf0\0\x110\xb2\1\4\2\0\2\1\x92\6`\2\0\5\20\2\1\2\20\5\1 \1\xf0\1b \2\0\4\26\4\0\27\0\xf8\0\20\xf1\0\0\27`\22P\2\4\x92\1\4\2\20\1\xf2\5\x80\1\22\0\1\22\20\25\2@\2\20\2\0\xf2\0\0b \2\0\6'
b'\31\6\0\27\xb0\2\27\0\5\27\5\20\22\xf0\0\2\4\x92\1\4\2\20\xe2\5\xb0\1\2\20\5\2\25\0\x020\2\20\2\0\xf2\0\0b \2\0\6\31\6\0\27\0\x85\1\0\xf8\0\0\27\0\a\31\a\20\22\xa0\1\4\x82\1\24\2\0\1\xc2\5P\22\20\22\5\2\0\1\5\22\0\x020\2\0\22\0\xf2\0\0b \2\0\n\26\n\0'
b'\27\0\25G\25\0\bJ\4\b\0\27\0\a\31\a\20\22\xb0\1\2\4\x82\1\24\2\0\1\xa2\5@\2%\x025B\1\0\22\20\1"\0\xf2\0\0b \2P\27\0\25\27\31\a\25\0\bZ\b\0\27\0\5\27\5\20\22\xe0\1\1\x92\1\0\1\0\x92\5@\2%\x025"\5\1\5\21\5 "\1\xf2\0\0b \2\x001\0\27\0\25\a\t\'\25\0\bZ\b\0'
b'\27\x001\20\22\xf0\1\x92\1\4\2\20\21\xe2\4@\1\2\25\2\5\22\1\5"\0\5\21\2\5 \xa2\1\0b \2\0\'\5\0\27\0\25\a\t\'\25\0\bZ\b\0\27`\22\24\xf0\1\2\4\xf2\0\24 \1\xc2\4`\1" \25\2\20\5\0\22\25\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\27\31\a\25\0\bZ\b\0\27\0\n\26\n\20B'
b'\24\2\xe0\1\4\x82\1\4\2\20\xb2\4\xf0\0\5\2 \2\25\22\25\0\2%\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\a\t\'\25\0\bZ\b\0\27\0\6\31\6\20\xf2\0\24\xe0\1\4\xf2\0\24\2\0\1\x92\4P5\2\25\2\5\0R% \x1252\0b \2\0\5\27\x050\25G\25\0\bZ\20\27\0\6\31\6\20\xa2\1\24\xe0\1'
b'\xf2\0\24\2\0\1\xf2\3P\5\2\25\2\25\2\0\2\1\2\0"\5\2\5\2\xc0\1b \2P\27\1\0\1\x057\25\0\b:\30@\n\26\n\20\xe2\1\xd0\1\1\x82\1\0\1\0\xe2\3P\2\1"\5\22\x010"\5\2\25\x010Q\20b \2\0\2\23\1\0\'\1\0\x017\25\0\b*\b \21\20\2\23\1\20\xf2\1\4\xc0\1\22\1R\4\2\20\21'
b'\xb2\3\x80\1\1\22\1\x020b\x150b\0b \2\0\4\26\4\0G\0\5\'\25\0\b\32\b\20\x017`\x82\2\24\xd0\1\4b\4\2 \1\x92\3`\2\0\2\5\0\2@b\5" R\0b \2\0\6\31\6\0W\0\1\5\a\25\0\b\n\b\0\1W\0\5\27\5\20\22\0\24\xc2\1\4\xf0\1\24R\24\2\20\x82\3`\5 \1P25\2\5\2\5 B\0b \2\0\6'
b'\31\6\0W\1\0\1%\0\30\20g\0\a\31\a\20\22\4 \24\x92\1\4\xa0\2b\24\2\0\1\xe2\2\xf0\0"PB\25\0\22\5\x1202\0b \2\0\n\26\n\0\xf7\0\0\1\25\0\b\20\xf7\0\0\a\31\a\x102$ \24R\4\0\xf2\0\4\xa0\1\4R\24\2\0\1\xc2\2P\2\x90\1\22\5\2\0\25\0\22\25\2\1 \1"\0b \2P\x87\1\1P'
b'\xf7\0\0\5\27\5\20b\20\2\4\0R\4\0\xf1\0\4\22\x90\1\x82\1\0\1\0\xb2\2P\5\x90\1\22\25\0\5\0"\25\x120"\0b \2\x001\0W!@\2\0\1g\x001\20\x92\1\4\20\4B\x80\1\4"\4\x80\1\22\1B\4\2\20\1\x92\2P\5\x90\1\2%\0\1\0\x125\22\x102\0b \2\0\'\5\0\'\21P(\4\b\0a`\xb2\1\24 '
b'\4\x90\1\4B\24\x80\1\24B\4\2\20\1\xf2\1@\22\1\x80\1\2%\2\20\22%"\x102\0b \2\0\a\31\a\0\27\1\20\2D \30\x80\1\n\26\n\20\xe2\1\24\2\x90\1\4\x82\1\x80\1\2\4B\4\2 \xd2\1@\5\2@\22\1\20\2% \x025"\x102\0b \2\0\a\31\a\0\a\1\0\2\24\26\t\26\4\6\2P\5\27\5\0\6\31\6'
b'\20\xf2\1\4\xa0\1\4\x82\1\24\x90\1\x042$\2\0\1\xb2\1@\22 B\20\2\25\2 \2%\2\0\22`b \2\0\5\27\5 \x146\t6\4\0\n\26\4\0\a\31\a\0\6\31\6\20\xf2\1\4\xa0\1\24\xa2\1\24\xf0\0\2\4B\24\2\0\1\x92\x010\25\2\20b\0\2\25\2 \2\25\2\0\22\1\x102\0b \2P\24\6\t\6\31\6\24@'
b'\6\31\6\0\a\31\a\0\n\26\n\20\xf2\1\4\xd0\1\1\xc2\1\x80\1\1R\0\1\0\x82\x010\25\2\20b\0\2\25\22\x102\0\22 2\0b \2\0\2\23\1\0\4\5\6\t\6\t\n\4\2\x001\0\6\31\6\x007\0\2\23\1\20\xf2\1\4\xe0\1\4\xa2\1\24\x80\1\2\x012\4\2\20\1b0\25\2\0\xf2\0\0\2\25\22\20\1\22'
b'\20\22\20B\0b \2\0\4\26\4\0\4\t&\22 \'\5\0\6\t\n\6\0\1\27\1`\22\20Db\4\0\xa2\x014\x104R\4\xa0\1\x142\4\2\20\1B0"\0b\20\2\25\2@\2\0\5\22\20B\0b \2\0\6\31\6\0\4\31$0\a\31\a\0\n\26\2@\1\xa2\x0104"\4\xb0\1\x042$\20$"\4\xd0\1\4"\24\2\x102 \25\22\0R\1\x102P'
b'\2\25\2 2\0b \2\0\6\31\6\0$\2\0\n\26\n\0\a\31\1@\xd2\2 \22\24\xb0\1\4b$ $\0R\24`\24\22\24\2\20\22\0\5\0\25\22\0R\20%\22@B 2\0b \2\0\n\26\n\0\4\2 \6\31\6\0\5\27\20\xc2\3\xf0\1\4\x92\x014\x80\1\4\22\24`\x042\0B\25\22\0B\0\1\0B0R\1\20\1"\0b \2\xa0\1\6\31'
b'\6@\xe2\3\1\xd0\1\4\xd2\1\x80\1\4RP\1\2\24\0"\1\2\0\5\1\2\x001\20\2\21\2\1\x120!20\1\2\0b \2\x001\x001\0\4\n\6\4\20\21\xb2\1\xf1\0\xc2\1\4\xc0\1\4\xe2\1\xf0\0\4R\4P"\0\22\20\1\0\2\0\2`\2\20\2\0\22`\2\21\x120\2\0b \2\0\'\5\0\'\5\0$\5\1\xa2\1!\x80\1\xc2'
b'\1\4\0\xb2\x014\xa2\1\4\xf0\x0042\24\xf0\0\x120\2\0b\0\2\20\2\0\22\0\1"% \x020\2\0b \2\0\a\31\a\0\a\31\a\0\2\20\xa2\1\xd0\1\xc2\1\4\x80\x024b\4\0b\24\20$\22\4P2\0\x82\x035\2\xf0\0b \2\0\a\31\a\0\a\31 \x82\1\1\x80\1\t\x050\25\xc2\1\4\xd0\x01204\22\4\xf0'
b'\0\4\22$\20\4\2P2\0R@\22\0\2@BU\x010\2\0b \2\0\5\27\5\0\5\a\20\x92\1`\x82\3\4\0\xa2\1\20\x82\x010\4\2\xf0\0\4R\24`2\0\x120\1\0\2\20R \2\20\1\2\5\0E0\2\0b \2\xf0\0\1\xf2\0P\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\xa2\1\20\x82\x011\4\x80\1\4b\4`2\0B\0!\2'
b'\1b\1\20\22\0\21\20E \2\0b \2\0\2\23\1\20\xf2\0\1`\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\x91\1\2\20\xc2\1\4\x80\1\4b\4`2\0\2E \x92\1\1\0%\1\25\20\2% \2\0b \2\0\4\26\2\1\xf2\0P\25\1\5\1\5\1\5\0\1\25\1\5\1\5\1\5\0\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0D"\4'
b'`2\0\2\25"\5\20\x82\1\x112%0\25 \2\0b \2\0\6\t\2\1b\1@\xc5\2\xc2\1\4\xa0\1\2\20\xc2\1\4\xd0\1\2$`2\0\2\5\2%\2\5\20b\1\0\22\25\2%\0\2\1\20\2 \2\0b \2\0\6\5\0b\x010\xb2\4\4\xf0\0\2\20\2\20\xc2\1\4\0\xf2\0\0" \22`2\0\2\5"\5\2\5\2\20R\20\2e\0\22P\2\0b \2\0'
b'\n\0b@\4@\4\0\4\0\4@\4\0\4\0\4 \xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\2\25\22\25\2\0\2\0\x012\20\22e\0\22\1 "\0b \2\20b@\2\0\22\5\x020\2\0\22\5\x020\2\0\22\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\1E\2\1\0\5'
b'\x102\0\1\2\1"%\0"0"\0b \2\0\1R \1\5\1\5\0\1\2\x050\1\5\0\1\2\x050\1\5\0\1\2\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\20\1%@\5\20\22\0\1\22\x102\21\22@!\0b \2\1R \2\25\2\5\20\1 \2\0\2\5\20\1 \2\0\2\5\20\1\0\xc2\1\x040\1\0\1\0\4\20\2'
b'\20\xc2\1\4\20\2@\2\0R\4\xf0\x002`\22 \5\0\22\x002\1\0\1\2\21\2\1\x90\1b R\1 \2\5"\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x002@\2\0\22\x010\22\0"\1\0\1 \2\1\20\xf2\0\0b B\x010\5\22\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0R\20\x012\0"\5\22 2\5"\0b B \x052\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0\2\xd0\1%\22 2\5"\0b 2 \5\22\24\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\x040\1\0\x010\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002\x80\1!\x92\x015\22\x102\5"\0b "02\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002`\1\22\21\xe5\1\2 "\5"\0b "\20\1\22\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x05'
b'0\xc2\1\4\0\xa2\1\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x00202\xc0\1"E\20"\5"\0b "\20"\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\0\xa2\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x0020\2\x010\x82\1\1\0\x050\2\25\2\20R\0b \x020\2\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\2\20\2\0\xb2\1\5"\20\22 \22\5"\0b \2 \22\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\1\20\2\0\xb2\1\5\22\25\x020b\0b \2\20\22\24\2\4\2\5\4\2\4\2'
b'\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0a\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\x020Q\20b \2\20\22\24\2\4\25\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20"\4'
b'\2\4\5"\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\1\22\5\4\2\4\22\5\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2'
b' \xf2\0\0b \2\0\2\0\22%2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\2\5\a \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2'
b'\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5B\5\2\4\2\5P\2\0\2\5P\2\0\2\27 \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\21\2\20\xc2\1\x040\30\20\b\20\2\20\xc2\1\4 \30\0'
b'\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0B\0\2\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\xa0\1\2\20\xc2\1\4 \30\0\2\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\5\0\a\20\xc2\1\4\0\xa2'
b'\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5\22\1\0"\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\0\xa2\1\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0\2\20\2\0\2\0\4\2\5P\2\0\2\5P\2'
b'\27\5\0\a\20\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\0\2\x002\0\4\20\24\2\5P\2\0\2\5P\2\27\5\0\a\20\xc2\1\4\xf0\0\1\20\2\20\xc2\1\4\0a\2\0\22\1"\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x012\21\20b \2\0\2\0\22\1'
b'\4\0\4\20\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\20B\1b\4\xf0\0\2\0\2\0\2\24\2\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x025"\0b \2\0"\20\4\0\4\2\0\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\x102\1\0*2\4\20\24\0\21\0\2\0\2\0$\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\20\4\2\4\22\24\2\5P\2\0\2\5P\2\0\2\5\0\a\20\xc2\1\4 \33\0\33\22\0\2\20"\1\0\2$\5"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20"\0\4\2\4\22\24\2\5P\2\0\2\5P\2\a9\a\t"\20*'
b'B\4 \33\0\33\22\0\2\20"\0T"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\0\4\2\4\22\24\2\5P\2\0\2\5P\t\a\t\a\31\a\t\22\1\0\x0242\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1'
b'\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\22\24\2\5P\2\0\2\5P\a\20\t\20\a\0\22\0\2D\n"\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\1"\5P\2\0\2\5P\a\2\5\t\22\a\22\20d\5\22\4 '
b'\33\0\33\22\0\2\20"\0$\22\4\n\22\4\20\24\0\21\0\2\0\2\0\24\2\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\5\1\0\5P\2\0\2\5P\a*\31\a\n\2\0\2d\n\22\4 \33\0\33\22\0\2\20"\0\24 \4\n\22\4\20\4\2\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0'
b'\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\x020\5P\2\0\2\5P\a2\t\a\22\0\xf4\0\n\22\4 \33\0\33\22\0\2\20"\0\4\20\2\0\4\n\22\4\xf0\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\2\20\5\1@\2\0\2\5\1@\t2\5\2\5\2\0'
b'\4\2\0\2\0\2\0\4\n\22\4 \33\0\33\22\0\2\20"\0\24\2\0\2\0\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20\22\4\2\4\2\4\2\0\22\0\xc2\1\1 \a\5\2\31\2\5\t\2\0\4P\4\n\22\4\xa0\1\2\20"\0\4\0\4\0\4\0\n\22\4\0\xf2\0\0\2\0\4\20\n\4\xf0'
b'\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\a\t\5\2\5\2\t\5\2\0\4\2\4 \2\4\n\22\4\0\x91\1\2\20"\0\4\2\4\2\4\0\n\22\4\0a\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\t\5'
b'\t\2\5\n\t\5\2\0\24\2\4\22\4\2\n\22\4\0\xa2\1\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf2\1\a\t\5\t\25\31\5\2\0\4\20\4\20\4\0\n\22\4\0\xa2\1\20"\0T\n\22\4\20\4 \2\0\2\0\2\0$\n\4\xf0\x002'
b'@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\aI\25\t\2\0\4\20\4\20\4\0\n\22\4\xf0\0\21\0\2\20"\x004\2\0\n\22\4\20\4 \2\0\2\0\2\0\4\2\0\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\a\x197'
b'\25\2\0\xf4\0\n\22\4 \30 \21\0\2\20"\0\4\0\4 \n\22\4\20\4\0\2\0\2\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\22\1\xf5\1\a\5i\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0$\0\24\n\22\4\20\4\0\4\0\2\0\2\0\2\0\4\20\n'
b'\4\xf0\x002@\2\0\1\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\2e\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\2\4\0\2\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0\24\0\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\5\2U\2\0\4'
b'\22\4\2\4\2\4\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\4\20\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0$\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\1\0\x85\2\t%R\0\4\20\4\0\4\0\4\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\20\2\0\2\0\2\0\2\0\2\0$\n\4'
b'\xf0\x002@\2\20\xb2\1\23%\1\b\2\b\0\xf2\0\0b \2\20\22\4\2\4\2\4\2\4\0\4\x85\2\aE2\0\4\2\0D\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\x035\b\5\30\x90\1b \2\20\22\4\2\4\2\4\2$\x85\2\aE2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2'
b'\20"\x004\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\x025\22\5\0b \2\20\22\4\2\4\2\4\2$\xf9\1\27I\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\20\4\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\xf2\0\0b \2\20\22\4\2\4\2\4\2'
b'$\x85\2\aI\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\2\4\2\4\n\22\4\0a\2\0\2\0\2\24\2\4\xf0\0"\5\2\1 \2\x102E"\23%8\0%B\0b \2\20\22\4\2\4\2\4\2$\xb5\19\aU\2\25\2\0D\22\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\2\4\n\22\4\xf0\0\2\0\22\0"\4\xf0\0"% \2\20'
b'"g\25\23%8\0%B\0b \2\x102\4\2\4\22\24\xb5\1:\a\5B%\2\0D\20\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\0\4\n\22\4\20\x110\2\0R\4\xf0\0"\20\5 \2\20\22\x97\1\23%8\0%B\0b \2\0\1\2%\4\2\4\2\5\24\xb5\x012\a\t\27%)\2\0\4 \4\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0'
b'\30\0\2\0R\4P\2%\2\20\5 \2\20\22\x97\1\23%8\0\22\5B\0b \2\0\2\0\2\25\4\2\4\5\2\24\xb5\1)\'\xf5\0\2\0D\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0\30\0\2\0R\4P\2%\xba\1\x97\1\23%(EB\0b \2\0\2\0\22\25\24\5\2\5\4\xc5\1\xc9\1\2\0\4 \4\20\4\n\22\4\xa0\1\2\20"'
b'\0T\n\22\4\20\25\0\30\0\2\0R\4P\2%\b\4\xba\1\5g\23%(%\0\5B\0b \2\0\2\0\2\5\2%"\4\xb5\1\2\xc5\1\2\0\4\20\2\4\20\4\n\22\4\xa0\1\2\20"\0T\n\22\x045\4\30\0\2\0R\4P\2%(\24\x8a\1\2\1W\23\25\1(%\0\5B\0b \2\0\2\0"\25\22\5\2\4\xb9\1\1\2\xb5\1\2\0\4"\4\20\4\n\22'
b'\4 \x040\30\0\2\20"\0T"\x045\n\1\b\0\2\0R\4P\2%H\x85\1 !\27\23\1\20(%\0\5A\0b \2\0\2\0\2\0B\5\2\4\xb9\1\0Q\5\1\5\21\5\1\2\0\4 \24\0\4\n\22\4 \4\0\2\0\v\30\0\2\20"\0D\n"5*\b\0\2\0R\4P\2%\0\xd8\1@\27 \25 %\0\5Pb \2\0\2\0b\0\2\4\xc5\1\xc0\1\2\0$\2\0$\n\22'
b'\4 \4\0\2\0\v\30\0\2\20"\0D25\n\t\n\20\2\0R\4P\2\xb5\4\0\5B\0b \2\0\2\0\x82\1\4\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20"\1\20\32\x0525\b\0\b"\0R\4P\2%\xd0\3%\0\5B\0b \2\0\2\0\2\5"\0\22\0\4\x95\3\2\0\24\0$\0\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\25Z'
b'\22\0R\4P\2%@\xfa\0\5\xf2\1%\0\5B\0b \2\0\2\0\2\0\2\20\2\1\2\24\x95\3\2\0\4\20\4\20\2\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\5\n\4:\1\2\0R\4P\2% \1\2\x8a\1\5\xf2\0c%\0\5B\0b \2\0\2\0\2\1\2\20\4\0\1\24\x95\3\2\0\4\20\4\0\2\24\n\22\4 \4\0\2\0\v\30\0\2\20'
b'\xc2\1\4\5\4\b*\5\0\2\0R\4P\2% \2\xaa\1R\x83\1%\1\5B\0b \2\0\2\0\22 \4\0\2\24\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\48\32\2\0\2\0R\4P\2% \5Y\5:U\xf3\0UB\0b \2\0\2\0\2\1\0\4\0\4\0$\x99\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\27\2\30\n'
b'\31\0\2\0R\4P\2%\0\1\5\x8a\1\4( \x93\x015\0\5B\0b \2\0\2\0\2\0\24\0\4\2$\x99\3\2\0\xf4\0"\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\0\1\a\0\v\0\v\0\2\0R\4P\x025\1\0\xc8\1\3\5\xb3\1%\0\5B\0b \2\0\1\22\4\2\4\2\4\2$\x97\3\2\0d\n"\4\xa0\1\2\20\xc2\1\4\1\20\a\v\0\v\0'
b'\2\0R\4P\2eY\5(\x023\xd5\1\0\5B\0b \2\20\22\4\2\4\2\4\2$\x99\3\2\0d\n"\4\0\x91\1\2\20\xc2\1!\20\v\0\v\0\2\0"\1\22\4P\2%2U\2\30\5\27#\xa2\1%\0\x051\20b \2\20\22\4\2\4\2\x042\x97\3\2\0d\n"\4\0\xa2\1\20\xb2\1P\1\0\v\0\2\0\2\1\20\22\4P\2%\0\23\x82\x017#'
b'\xa0\1%\0\5Pb \2\20\22\4\2\4R\x97\3\2\0d2\4\0\xa2\1\20\xa2\1\x80\1\v\0\2\1\20:\4\2@\2\25#\xd7\1#\x92\1\v%\0\5;\20b \2\20\x82\1\25\x97\3\2\1\0\x024\x052\4\xa0\1\2\20\xa2\1\xe0\1*$@\2UYW\5#\x92\1\v%\0E\2\0bPR\5\xd7\3\22\1\20\32R\4\xf0\0\4\2\0\2\20\xa2\1P'
b'\1\xf0\0\32\1\2\1\n@\2\5CYG\25#\xd5\1\0\25\2\25\2\xb0\1\x0252\x175\a\25\'\5\ae\a\xf5\0\xc2\1\4\xf0\0\24\0\2\20\xa2\1`\2`"\32\1@Z\xf7\x005\1\b#\xa0\1%\0\5\x82\2\xf8\0\xea\3\xc2\1\4 \x010\24\0\2\20\xa2\1\xf0\0\1P2\1\4@Z\xf7\0\25\21\30#\xa0\1%\0\2\5\2\5\2'
b'\5"\5R\5(R\xea\3\xc2\1\4 \x010\24\0\2\20B\1"\25 \1@\x020B\v\2\1\33\21\xd5\1\1H#\x90\1\1%\20\21\v\1\v!\vQ\v\30B\x85\4\xc2\1\4 \1\0"\24\0\2\20B\0E \21@R$0$Zi\58\x023$\n\x95\1 \xeb\1\b\228\x8a\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\x000\1\xf0\0\1\22\0Q\n\2e'
b'\xa8\1C\2$\n\xc0\1\xc5\1(\2\30\4\xaa\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0@\2\x80\1\2\32Q9\1%\xc3\1\1\x134\n\xc0\x015\2E\22(\2\b\4\xca\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0P\2\xf0\0\2:A\t\n\x015\xf9\0\5#\33$\n\24\0+\20\v \5\0B%\22\25\2(\2\b\xea\4\xc2\1\4'
b' \1\0"\24\0\2\20\22\0\xf5\0\x80\1\22@\32\25\xf1\x002\xf5\0\23\1\33\a\24\n\24\2@+\20\5\0\2\25\22%\22\5\2(\2\b\4\xea\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0\20\x110\b\31\b0\24\x81\x014\x93\1\33\27\5\4\n\4\22\0\x010;\0\2\0\2\25\2\5\1\2\5\22\1\2\30\22\b\xfa\4'
b'\xc2\1\4 \1\0"\4\2\0\2\20\22\0%\30\0\23\0\a\31\a\20\b\t\n\30\xa4\2\xc7\1\4\n$\20\n\5\33\0[\2\x002\5"\5\22\30\22\30\xfa\4\xc2\1\4\xa0\1\2\20\22\0\25\2\30#\a\5\t\27\0\1H\4\3\4\5\2\5\1\t\1\xa4\1i\5\'\2$\2\20\2\nU"E\22\1%\22(R\xd5\4\xc2\1\4\0\xa2\1\20\22'
b'\20\30\27\23\5G\2\58\4\x035\1\n\5\1\x94\1\x97\1\2\32\24\2 \4\n\xa5\2\22\xf8\5\xc2\1\4\0\xa2\1\20"\0\30\27\23\x027\5\22%\32\23%1\xf4\2\20\4\20\4\n\xa0\1\x9b\a\xc2\1\4\0\x91\1 "\0\30\27\3\2\4\a\5\27\5B\32\23%1\xb2\2\n\24\2\0\24\20\4\n\xb1\1k\1K!K\21\xbb'
b'\1!K\xd1\1\xc2\1\4\xd0\1"\0\30\27\3\24\a\2\a\25\22 \32\23%\1\2\21\xb2\2\n\22\0$\20\4\n\5\2\xe5\1"E\a\25\a\x95\1\a\xd5\1\a5\a\x85\1\xc2\1\4\0\xc2\1\4\2\25\30\27\3\24\a\2\a\25\22(\32\23%\1\2\21\2%\xf2\1\n\x104\20\4\n\25BU\2\5B\25\22\x87\1\5\a%\a\25\a%\27'
b'\xf5\0\a%\27%\27\5\a\5\xc2\1\4\xd0\1\4\2\20\30\27\3\24\'\25\22(\32\23%1\0%\x80\2\2D\20\4\n5\2%\22\x85\1B\5\2\5\a\x1575\a\x85\1\a%\'\5\a5\a%\'\5\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22(\32\23%1\0%\xd0\1\2\4\nT\20\4\n\22%B\5\22G\x052\25\x175\27\x95\1\27'
b'\25\x175\xf7\0\25\'\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22 \32\23%!E\x90\1"\0\24\nT\20\4\n\22\25\22\5"\5\x127%\2\5\2\5\22\27%\27\xa5\1\a\25\27\25g\25\'\25\a\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25B\32\23%!%\2\5\xf1\0\20"\0\24\nT\20\4\n\22\25\22\5'
b'\22\5\2\5G%\2\5B\a\xf5\1\a\5\27%g\x157E\xc2\1\4\xb0\1%\1\20\30\27\3\22\'\25\22%\32\23%!%\0\5\xf2\0\20"\0\24\nT\20\4\n\2%B\5\2\5\x1757B\xb5\1W\5\x175W\x157E\xc2\1\4\xb0\1% \30\20\3\20\'\25\22(\32\20% %\0\5\xf2\0\20"\0\24\nT\20\4\nE2U\a\5G\xb5\x017\5\aE'
b'\a\x85\1\x87\x015\a\xc2\1\4\0\xa2\1%\xd0\3%\0\5\xf2\0\20"\0\24\nT\20\4\n\2e\2e\x87\x012%\'5W%\xe7\1U\xb2\1$\33\x80\1\xb5\4\0\5\xf2\0\20"\0\24\nT\20\4\n\v\20[\xa5\3\x87\4\xa2\1\4\22\4\0\v\xf0\0\v%\v( \27 \24 \27\20\30 \22\20%\0\5\xf2\0\20"\0\24\nT\20\4'
b'\n\2\5\2%\2\27%G\25\a\5\a\x057\x152EW\x85\1\a%WE\a\xd2\1\4\x80\1\v\0%\v(\21\0\27 \24 \25\21\30\21\0\22\20%\0\5\xf2\0\20"\0\24\nD\2\20\4\n\xd5\1\'%\27\x85\1"5\22\25\27\x85\1\a%\27\25\'5\a\xd2\1\4\v0;\20%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0%\0\5\xf2'
b'\0\20"\0\24\n4\2 \4\2%\22U\a\25\'%\27\x85\1\2\5\2\5B\25\'\5\a\25\27%G%\27%\27R\4b\4+ +\20%\v\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n$\x020\2\0\5\2\5\2%\'\5\x87\1\5\'%2\25\2\25\22%\aB\a\5\a5G\5\aE\a\5\a\xd2\1\4\v\20[\0\v%\v'
b'\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\24`\xb5\1\27U\a\25\27%\2%\x025\22%\a5\2eB\25\xd2\2\4\0[\20\33%\v(\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\4`5\2%\'%\a\xf5\0\27U\2\5b\5\2\27\x92\1\5\1\5B%2\25'
b'\24\xb2\1\4\33@\33\0\v%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0E\xf2\0\20"\0\24\n \33\5\v\1%\x025\a\25gE\27E\a\x85\x017\5\2e\2\xa5\1\x025\xf2\1\33@\33\20%\0(\21\3\27 \24\0\30\25\21\30\22\20\1\3\0%\2\5\xf2\0\20"\0\24\n\20\33\25\1\5\22\5\2e\a\5\a\25\x17'
b'5\'5\27%\a5\'\xa5\1\2\xa5\1\x015\xe2\1\1+\20\33\0\v\20%\1"\20\3\27 \22\0\22\27\x102 \3\0%\0\5\xf2\0\20"\0\24\n\33\1E\2\1\xf5\0\a\25\aU\a\5\'\25W\5\'\25\'U"\25\22\25B\xf5\0\xc2\1\4\1\33\20\33\0+\20\xb5\4\0\5\xf2\0\20"\0\24\n\0\5\x125\22\xa5\1\a\25\a57'
b'\x057\25G\5G5\27\25\27\5\2\25B\x85\1\xa2\1\4\33 \x8b\1% T\30\25\2\b`\23P%\0\5\xf2\0\20"\0\24\n\25\22\x052U\a\x85\1\27E\x97\x015\'\5\27\5\a\5\a\xb5\1\x125\2\5\2\25\x82\1\4\xf0\0K\x105\20\xf4\0\30\25\30@3K%\0\5\x90\1"\0\24\n\x025\2\x85\1\a%\27E\a5\x87\1U'
b'\xf7\0\x95\x0175\a%\22\5b\4;\0K\0\v\0\v\25\x005\x94\1\5\4\b\25\30\0Ck%\0\5\x90\1"\0\24\n5\2\25\a\xa5\1\'\25\xf7\0\25\27\5\'\25G\5W\x157\5\a\5\27\xc5\1\xf2\0\xe0\1\21\0\1%\4\x82\1\5\2\0\2\25\x183\25A\v%\0\5\x90\1"\0\24\2\x91\1e\x87\6\v\1\33\x81\1b\xa0\2'
b'%\4\xf5\0\22 \b\5\30#\0e\v%\0\2+\0;\20"\0\4\2\xa0\1e\x87\6\33\21\x80\1"\4\1+\0\x8b\1\25\0\25\2E\x94\x010(#\20k\0%\20\33\0\5+\5\v\0"\0\2\0\5"\25\x87\1\5\27EGE\x175\'%g\5\27U\a\x057\25\'E\22\5\2\24;\0\33\20;5\0\2\25\22\xb5\4 5\22\25P\a\2\5\22\5\27\5\x97'
b'\x015W\25\a\25\27\25\a\x157\5\x97\x015\a\25G\x057\25\a\25\22\5'
)
#image drawing code sample
draw_image(image, 0, 0, 160, palette, zoomx=1, zoomy=1, itransp=-1)
draw_image(image, 320, 0, 160, palette, zoomx=-1, zoomy=1, itransp=-1)
Rappelons que les interpréteurs Micropython 32 bits de nos calculatrices font appel à 3 types de mémoires :
Voici quelques indications de consommation heap mesurées en Python 64 bits sur nos ordinateurs, via la méthode
Dans tous les cas comme tu peux le constater le langage Python a le très gros défaut d'être un énorme consommateur de heap, mémoire qui sera bien souvent le facteur le plus limitant pour tes projets sur calculatrices. Rappelons les pires modèles sur ce critère :
- La mémoire de stockage qui comme son nom l'indique stocke physiquement tes fichiers de scripts Python.
- La pile (stack) qui référence, à l'exécution, les objets Python créés par tes scripts. Sa capacité limite donc le nombre total d'objets Python pouvant coexister simultanément en mémoire.
- Le tas (heap) qui reçoit, à l'exécution, le contenu des objets Python créés. Il limite donc le volume global de données utilisées pour ces différents objets.
Voici quelques indications de consommation heap mesurées en Python 64 bits sur nos ordinateurs, via la méthode
sys.getsizeof(...)
:- pour un entier : 24 octets de base + 4 octets si non nul + 4 octets pour chaque groupe de 30 bits utilisés au-delà des premiers 31 bits dans sa représentation binaire
- pour une liste : 56 octets de base + 8 octets par élément + les tailles de chaque élément
- pour un tuple : 40 octets de base + 8 octets par élément + les tailles de chaque élément
- pour une chaîne : 49 octets de base + 1 octet par caractère
- pour un tableau d'octets (bytes) : 33 octets de base + 1 octet par octet
sys.getsizeof(...)
pour des mesures fiables, mais le fonctionnement en reste similaire.Dans tous les cas comme tu peux le constater le langage Python a le très gros défaut d'être un énorme consommateur de heap, mémoire qui sera bien souvent le facteur le plus limitant pour tes projets sur calculatrices. Rappelons les pires modèles sur ce critère :
- NumWorks avec seulement 64,9 Ko de heap si ta machine est verrouillée sur le firmware officiel
- éditions Python des TI-83 Premium CE et TI-84 Plus CE avec encore bien pire 19,7 Ko de heap
- éditions Python des TI-83 Premium CE et TI-84 Plus CE qui en pratique n'autorisent que 80 Ko d'espace de stockage pour les scripts Python (si on les dépasse, l'application Python refusera de se lancer, et il faudra archiver ou supprimer des scripts jusqu'à redescendre en-dessous de cette limite)
- NumWorks avec encore bien pire 43 Ko si ta machine est verrouillée sur le firmware officiel
Prenons aujourd'hui en exemple l'image ci-contre utilisant 12 couleurs différentes.
Comme déjà expliqué, img2calc a justement été conçu en priorité pour réduire la consommation en heap et stockage. Pour cela img2calc mutualise deux approches :
Comme déjà expliqué, img2calc a justement été conçu en priorité pour réduire la consommation en heap et stockage. Pour cela img2calc mutualise deux approches :
- La compression de ton image au format RLE.
- Le compactage des données, avec l'utilisation des types d'objets Python les moins gourmands en mémoire :
- des tuples plutôt que des listes pour la palette de couleurs (utilisable comme des listes, mais au contenu non modifiable à la différence)
- des bytes plutôt que des chaînes ou listes pour les données de la compression RLE (type d'objet Python s'utilisant comme une chaîne de caractères mais optimisé pour le stockage d'octets)
Le format de couleur le plus courant est le tuple
En cibant l'un de ces modèles, voici la palette obtenue avec img2calc :
C'est le pire cas niveau consommation mémoire. Les données de cette petite palette 12 couleurs de rien du tout, occupent en effet ici :
(rouge, vert, bleu)
. C'est le seul format connu des bibliothèques graphiques :- ti_draw (TI-Nspire CX II)
- ti_graphics (éditions Python des TI-83 Premium CE et TI-84 Plus CE)
- casioplot (Casio Graph 90+E et fx-CG50)
En cibant l'un de ces modèles, voici la palette obtenue avec img2calc :
- Code: Select all
palette = (
(0,0,0), (104,40,120), (136,112,80), (80,192,0), (248,132,24), (160,168,160), (248,252,0), (0,252,248), (248,0,0), (248,252,248), (248,172,176), (0,0,248)
)
C'est le pire cas niveau consommation mémoire. Les données de cette petite palette 12 couleurs de rien du tout, occupent en effet ici :
- 158 octets en mémoire de stockage
- $mathjax$40+12\times\left(8+40+3\times\left(8+24\right)\right)+26\times 4$mathjax$soit déjà 1,872 Ko à l'exécution en mémoire heap
En plus des tuples
Les données de la palette n'occupent ici plus que :
(rouge, vert, bleu)
précédents, la bibliothèque graphique kandinsky des NumWorks gère 2 autres formats de couleurs :- chaînes hexadécimales
"#RRVVBB"
- chaînes identifiant certaines valeurs de couleurs avec leurs noms ou initiales
- Code: Select all
palette = (
"k", "#682878", "brown", "g", "orange", "#a0a8a0", "y", "cyan", "r", "w", "#f8acb0", "b"
)
Les données de la palette n'occupent ici plus que :
- 100 octets en mémoire de stockage
- $mathjax$40+12\times\left(8+49\right)+1+7+5+1+6+7+1+4+1+1+7+1$mathjax$soit 766 octets
Pour la HP Prime, un seul format de couleur est reconnu par la bibliothèque graphique hpprime, mais il est bien plus intéressant en terme de mémoire : l'entier 24 bits.
Ici nous avons :
- Code: Select all
palette = (
0, 7022972, 9269841, 5358336, 16746267, 10922151, 16776960, 65535, 16711680, 16777215, 16755894, 255
)
Ici nous avons :
- 112 octets en mémoire de stockage
- $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$soit seulement 468 octets en mémoire heap
Le programme Micropython permettant notamment de rajouter le Python sur les anciennes TI-Nspire CX, TI-Nspire CM et TI-Nspire monochromes, inclut une bibliothèque graphique nsp gérant elle aussi un seul et unique format : l'entier 16 bits.
Cela nous donne :
- Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, 65535, 64886, 31
)
Cela nous donne :
- 86 octets en mémoire de stockage
- $mathjax$40+12\times\left(8+24\right)+11\times 4$mathjax$soit 468 octets en mémoire heap
Enfin, traitons du cas de l'application de mathématiques intégrée KhiCAS, disponible pour les modèles couleur TI-Nspire CX II, anciennes TI-Nspire CX, NumWorks, Casio Graph 90+E et fx-CG50.
img2calc choisissait ici parmi 2 formats de couleurs :
Les données de la palette occupaient ici :
Résumons les consommations, du meilleur au pire :
Une économie de mémoire fort modeste par rapport à tout ce que nous venons de survoler, les scripts générés pour KhiCAS se classant alors à l'avant-dernière place niveau consommation mémoire.
Or la bibliothèque graphique graphic de KhiCAS reconnaissait un autre format de couleur fort intéressant mais non utilisé ici, l'entier 16 bits. Un oubli fort regrettable de notre part, ne rendant ainsi pas honneur aux formidables possibilités de KhiCAS...
img2calc choisissait ici parmi 2 formats de couleurs :
- tuples
(rouge, vert, bleu)
- chaînes nommant les couleurs mais avec quelques différences par rapport aux NumWorks : uniquement des noms complets (pas d'initiales), et avec un peu moins de couleurs reconnues
- Code: Select all
palette = (
"black", (104,40,120), (136,112,80), "green", (248,132,24), (160,168,160), "yellow", "cyan", "red", "", (248,172,176), "blue"
)
Les données de la palette occupaient ici :
- 156 octets en mémoire de stockage
- $mathjax$40+12\times 8 + 5\times\left(40+3\times\left(8+24+4\right)\right)+7\times 49+5+5+6+4+3+0+4$mathjax$soit 1,246 Ko à l'exécution en mémoire heap
Résumons les consommations, du meilleur au pire :
tas/heap (octets) | stockage (octets) | |
nsp | 468 | 86 |
hpprime | 468 | 112 |
kandinsky | 766 | 100 |
graphic | 1246 | 156 |
ti_draw ti_graphics casioplot | 1872 | 158 |
Une économie de mémoire fort modeste par rapport à tout ce que nous venons de survoler, les scripts générés pour KhiCAS se classant alors à l'avant-dernière place niveau consommation mémoire.
Or la bibliothèque graphique graphic de KhiCAS reconnaissait un autre format de couleur fort intéressant mais non utilisé ici, l'entier 16 bits. Un oubli fort regrettable de notre part, ne rendant ainsi pas honneur aux formidables possibilités de KhiCAS...
Et bien bonne nouvelle, la dernière mise à jour d'img2calc corrige cet oubli.
Les 3 formats de couleurs gérés sont désormais correctement pris en compte lorsque l'on effectue une conversion pour KhiCAS :
Les données de la palette occupent donc ici :
Résumons suite à cette mise à jour :
Les scripts générés pour KhiCAS se classent maintenant clairement parmi les meilleurs niveau consommation mémoire !
Bonnes conversions à toi, et n'hésite pas à nous montrer tes projets !
Les 3 formats de couleurs gérés sont désormais correctement pris en compte lorsque l'on effectue une conversion pour KhiCAS :
- tuples
(rouge, vert, bleu)
- chaînes nommant les couleurs
- entiers 16 bits
- Code: Select all
palette = (
0, 26959, 35722, 22016, 64547, 42324, 65504, 2047, 63488, "", 64886, 31,
)
Les données de la palette occupent donc ici :
- 84 octets en mémoire de stockage
- $mathjax$40+12\times 8 + 11\times 24 + 10\times 4 + 49 + 0$mathjax$soit 489 octets seulement à l'exécution en mémoire heap
Résumons suite à cette mise à jour :
tas/heap (octets) | stockage (octets) | |
nsp | 468 | 86 |
hpprime | 468 | 112 |
graphic | 489 | 84 |
kandinsky | 766 | 100 |
ti_draw ti_graphics casioplot | 1872 | 158 |
Les scripts générés pour KhiCAS se classent maintenant clairement parmi les meilleurs niveau consommation mémoire !
Bonnes conversions à toi, et n'hésite pas à nous montrer tes projets !
Liens :
- https://tiplanet.org/forum/img2calc.php (version intégrée à TI-Planet avec entre autres le chat d'entraide)
- https://tiplanet.org/img2calc_classe (version allégée dédiée à un usage pédagogique en classe)