Images sur la CASIO fx-92+ Spéciale Collège

La CASIO fx-92+ a une petite résolution de 192 pixels (-95 à 96) de large et 47 pixels de haut (-23 à 23). Ceci permet malgré tout d’obtenir quelques jolis visuels :

Marylin Monroe
Jeu Dark Castle pour Macintosh (1986)

La CASIO accepte des nombres sans les arrondir jusqu’à 12 chiffres, ce qui en binaire fait :

>> bin(999999999999)

'0b1110100011010100101001010000111111111111'

Soit l’équivalent de 40 pixels. Cependant, si tous les pixels étaient à 1, on obtiendrait le nombre :

>> int('0b'+'1'*40, 2)
1099511627775

qui a 13 chiffres. On peut donc soit se restreindre à 39 pixels de haut où être conscient qu’avec 40 pixels il pourra y avoir éventuellement des anomalies. Nous prendrons ce petit risque.

Partie Gimp

Créez une image de L x 40 pixels où L est entre 1 et 192. Mettre l’image en noir et blanc (Menu Image – Mode – Couleurs indexées – Utiliser une palette noir et blanc 1 bit). Faire votre dessin.

Filtres – Python Fu – Console et coller ce script :

def gimp2fx92():
   img = gimp.image_list()[0]
   drw = pdb.gimp_image_active_drawable(img)
   L = pdb.gimp_image_width(img)
   H = pdb.gimp_image_height(img)
   for x in range(L):
    for y in reversed(range(H)):
      v = 0 != sum(list(pdb.gimp_image_pick_color(img,drw,x,y,1,0,0))[:-1])
      c = v + (2 * c if y != H - 1 else 0)
    print c

Pour chaque x entre 0 et la largeur L de l’image, on parcourt les pixels y de la colonne. La valeur de v sera égale à 0 si le pixel est noir. A chaque étape c est multiplié par 2 et on ajoute 1 s’il y a un pixel noir.

En lançant le script on obtient une liste d’entiers. Voici un exemple avec l’image ci-dessous :

Si on décompose 402653184 en binaire on obtient :

>> bin(402653184)
'0b11000000000000000000000000000'

Les 27 zéros correspondent aux 27 cases noires de la première colonne suivi de 2 cases blanches (les ’11’) et le reste est noir :

La première colonne de l’image

Pour décomposer l’entier en nombre binaire sur la CASIO, on va utiliser des divisions successives par 2, ce qui en Python donne :

def dec2bin(a):
 s = ''
 while n > 0:
  a /= 2
  s += '0' if a == int(a) else '1'
  a = int(a) 
 return s 

>> dec2bin(402653184)
'00000000000000000000000000011'

Partie CASIO fx-92+

Script pour la CASIO :

-95 → B
S'orienter à -90
Répéter jusqu'à B = 95
 Aller à x = B , y = 22
 ? → A
 B + 1 → B
 Répéter 40
   A ÷ 2 → A
   Si A = Ent(A)
    Stylo écrit
    Avancer de 0 pixels
   Fin
   Stylo relevé
   Avancer de 1 pixels
   Ent(A) → A
 ⤴
⤴
Aller à x = 110 , y = 0

Ainsi, en lançant le programme CASIO et en tapant tous les nombres entiers fournis par Gimp, on aura l’image finale !

Macro Excel

Si vous avez la clé USB CASIO avec l’émulateur de la fx-92+ Spéciale Collège, il est possible de créer une petite macro qui va envoyer les différents nombres à intervalles réguliers. Pour cela copiez-collez les nombres dans un classeur Excel puis ALT+F11 pour accéder à VBA, Insertion – Module et coller le code :

Sub data2fx92()
 Application.Wait Now + #12:00:05 AM#
 For Each cellule In Selection
  If cellule.Value <> "" Then
   SendKeys cellule.Value & "~"
   Application.Wait Now + #12:00:12 AM#
  End If
 Next
End Sub

Lancez l’émulateur CASIO, tapez le programme et le lancer. Il s’affiche A?

Dans Excel sélectionnez uniquement les données (CTRL + A) mais PAS toute la colonne (qui contient 1 million de cellules !!). Lancez la macro et dans les 5 secondes qui suivent retournez dans l’émulateur (si c’est trop rapide modifiez la ligne 12:00:05 en 12:00:10 pour vous laisser par exemple 10 secondes). Toutes les 12 secondes un entier est envoyé à la machine et la colonne s’affiche à l’écran.