Source: Scratch Wiki en français


Scanner une image sur Scratch


Ce tutoriel vous indique comment scanner une image à différentes résolutions, et sauvegarder votre image dans différents formats.

Info
 Info :
Un script plus performant a été développé et est disponible ici.

Créer les paramètres du scan

  • Résolution à scanner (résolution)
  • Début X (début x)
  • Fin X (fin x)
  • Début Y (début y)
  • Fin Y (fin y)
  • Nombre de lignes Y (lignes)

Proposer à l'utilisateur de modifier la zone de la scène à scanner

Pour scanner la scène entière avec une résolution de 480x360 :

Quand @greenFlag est cliqué::events hat
mettre [début x v] à (-240)
mettre [fin x v] à (240)
mettre [début y v] à (180)
mettre [fin x v] à (-180)
mettre [résolution v] à (1)

Pour une taille configurable, deux possibilités se présentent :

  1. Utiliser des barres (deux pour X, deux pour Y)
  2. Utiliser des variables

Dans chaque cas, l'information est stockée dans les variables concernées (début x) (fin x) (début y) (fin y)::grey.

Attention
 Attention :
Veillez à ce que (début x) soit plus petite que (fin x) ; que (début y) soit plus grande que (lignes).

Créer une variable indiquant la résolution

mettre [résolution affichée v] à (regrouper (((fin x) - (début x)) / (résolution)) et (regrouper [x] et (((début y) - (fin y)) / (résolution))))

La variable (résolution affichée) donne la taille x fois la taille y de l'image.

Scanneur

Il existe deux méthodes : obtenir les couleurs de la scène puis scanner la scène avec ces couleurs (rapide et efficace) ; scanner la scène sans avoir cherché ses couleurs (très long et ennuyant). Le choix est vite fait.

Obtenir les images de la scène

Pour que le script suivant fonctionne, il faut créer deux costumes :

  • Un qui occupe toute la scène
  • Un qui fait du 1x1 pixel
définir Scanner les couleurs
basculer sur le costume (scène remplie v)
supprimer tous les éléments de la liste [couleurs v]
mettre [i v] à (0)
répéter (32) fois {
répéter (32) fois {
répéter (16) fois {
ajouter (16) à [i v]
si <couleur (i) touchée ?> alors {
ajouter (i) à [couleurs v]::list
}::control
}@loopArrow::control
ajouter (1792) à [i v]
}@loopArrow::control
ajouter (458752) à [i v]
}@loopArrow::control

Scanner la scène

définir Scan image
Scanner les couleurs::custom
basculer sur le costume (scène remplie v)
si <(résolution) < (1)> alors {
mettre la taille à ((résolution) * (100)) de la taille initiale::looks
} sinon {
basculer sur le costume (2x2 pixel v)
mettre la taille à ((résolution) * (100)) de la taille initiale::looks
}::control
basculer sur le costume (2x2 pixel v)
mettre [lignes v] à (1)
supprimer tous les éléments de la liste [image v]
mettre y à (début y)
répéter ([plafond v] de (((début y) - (fin y)) / (résolution))) fois {
mettre x à (début x)
répéter ([plafond v] de (((fin x) - (début x)) / (résolution))) fois {
Obtenir la couleur::custom
ajouter (([plafond v] de ((fin x) - (début x))) / ([plafond v] de (((fin x) - (début x)) / (résolution)))) à x
}@loopArrow::control
ajouter (1) à [lignes v]
ajouter (#) à [image v]::list
ajouter ((-1) * (([plafond v] de ((début y) - (fin y))) / ([plafond v] de (((début y) - (fin y)) / (résolution))))) à y
}@loopArrow::control

Le bloc Obtenir la couleur :

définir Obtenir la couleur
mettre [j v] à (1)
répéter (longueur de [couleurs v]){
si <couleur (élément (j) de [couleurs v]) touchée ?>> alors {
ajouter (élément (j) de [couleurs v]) à [image v]::list
stop [ce script v]
}::control
ajouter (1) à [j v]
}@loopArrow::control
ajouter [erreur] à [image v]::list


Danger
 Danger :
Pour des raisons de performances, utiliser l'option ne pas rafraîchir l'écran (case à cocher lors de la création du bloc).
Info
 Info :
Pourquoi ajouter un "#" à chaque saut de ligne ? Vous le découvrirez dans les options suivantes, mais cet ajout est nécessaire !

Dessiner l'image dans la liste

définir Afficher l'image (x) (y)
effacer tout
mettre [g v] à (1)
aller à x:(-240) y:(180)
répéter (longueur de [image v]){
si <(élément (g) de [image v]) = [#]> alors {
mettre x à (-240)
ajouter ((-1) * (y)) à y
} sinon {
mettre la couleur du stylo à (élément (g) de [image v])
stylo en position d'écriture
ajouter (x) à x
relever le stylo
}::control
ajouter (1) à [g v]
}@loopArrow::control

Ici :

  • Un élément # indique un retour à la ligne
  • Un autre élément indique une couleur
  • Pour X et Y, entrer les valeurs de déplacement utilisées par le bloc Scan image::custom

Exporter

.imw

Rien de plus simple ! Voir la page dédiée.

définir Sauvegarder au .imw
mettre [code v] à (regrouper (résolution) et []) // voir DANGER
mettre [code v] à (regrouper (code) et (regrouper (lignes) et [@]))
mettre [save v] à (1)
répéter (longueur de [image v]){
mettre [code v] à (regrouper (code) et (regrouper (élément (save) de [image v]) et [/]))
ajouter (1) à [save v]
}@loopArrow::control
mettre [code v] à (regrouper (code) et [◊])
Danger
 Danger :

La variable "voir DANGER" a pour valeur \ (il est impossible d'afficher ce symbole dans des blocs du wiki). Une en-tête au .imw ressemblera donc à résolution\lignes@.

Il suffit de proposer à l'utilisateur avec une liste de copier le code et de le sauvegarder dans un .txt ou autre document texte.

.bmp

Sur le modèle de ce projet.

Voir aussi

Cet article fait partie de la catégorie des tutos
Tous les articles de cette catégorie :