Embarquer une image dans du code Squeak

Lorsque l’on veut mettre à disposition un projet Squeak sur le serveur Monticello SqueakSource, il n’est pas possible d’avoir des ressource externes (images, sons, etc, …) car un serveur Monticello ne peut pas stocker autre chose que des fichiers Smalltalk pour l’instant. Heureusement, Noury m’a donné une solution qui consiste à transformer les images en ByteArray. Voila son code qui fait la transformation et génère automatiquement la méthode correspondante :


|fileStream imageBytes methodStream|
fileStream := FileStream readOnlyFileNamed: 'uneImage.gif'.
fileStream binary.
imageBytes := fileStream contentsOfEntireFile asArray.
methodStream := WriteStream on: (String new: imageBytes size).
methodStream
nextPutAll: 'imageBytes';
crtab;
nextPut: $^.
imageBytes printOn: methodStream.
methodStream
space;
nextPutAll: 'asByteArray'.
UneImageMorph class compile: methodStream contents
classified: #'accessing' notifying: nil.
fileStream close.

Ce script rajoute dans la classe UneImageMorph, une méthode imageBytes formée à parti de l’image uneImage.gif. A adapter suivant vos besoins. Il y a néanmoins une limite à la taille des méthodes. J’ai pu convertir avec cette méthode des images jpg jusqu’à 20K. Attention, la visualisation de la méthode correspondante devient très lente.

Il est ensuite facile de construire un Morph à partir de cette image-méthode :


UneImageMorph>>new
| imageStream |
imageStream := ReadWriteStream with: self imageBytes.
imageStream reset.
^ self fromStream: imageStream

WordPress database error: [Table 'doesnotunderstand.wp_comments' doesn't exist]
SELECT * FROM wp_comments WHERE comment_post_ID = '275' AND comment_approved = '1' ORDER BY comment_date

Comments are closed.