Images
La façon rapide de travailler pixel par pixel. app.getImage lit un cel (ou une partie) dans une Image, un tampon de pixels qui vit à l'intérieur du script : img:getPixel et img:setPixel ne quittent jamais le script, donc une boucle sur chaque pixel d'un cel de 512 x 512 prend environ un dixième de seconde. app.putImage la réécrit en une seule modification, quel que soit le nombre de pixels que tu as définis. Un pixel est un entier empaqueté (app.pixelColor.rgba(r, g, b, a), comme dans Aseprite) ; setPixel accepte aussi "#rrggbb[aa]" et { r, g, b, a } (alpha vaut 255 par défaut). Sur les sprites indexés, img:getIndex et img:setIndex travaillent avec des index de palette, donc les couleurs en double restent distinctes. Le schéma habituel : local img = app.getImage(layer, frame); for y = 0, img.height - 1 do for x = 0, img.width - 1 do img:setPixel(x, y, ...) end end; app.putImage(layer, frame, img). (17 fonctions)
app.getCompositeImage(frameId, rect?) — lit
À quoi ressemble une image d'animation, sous forme d'Image RGBA : chaque calque visible (d'image et de tilemap) mélangé avec son opacité et son mode de fusion, exactement comme à l'export, sur rect (tout le canevas par défaut). Les calques de référence sont exclus (ce n'est pas du dessin) ; ce qui est hors du canevas est lu comme transparent. Sers-t'en pour vérifier ton résultat, ou comme source pour img:drawImage.
frameId(string)rect(table, facultatif) — La zone à lire, { x, y, width, height } sur le canevas (entiers ; width et height de 1 à 4096). Omis = tout le canevas.x(integer) — Bord gauche.y(integer) — Bord supérieur.width(integer 1–4096) — Largeur en pixels.height(integer 1–4096) — Hauteur en pixels.
Renvoie (image) : Une Image (voir img:getPixel et les autres méthodes img:).
app.getImage(layerId, frameId, rect?) — lit
Lit le cel d'un calque/d'une image d'animation dans une Image : un tampon de pixels à l'intérieur du script que tu lis et modifies avec img:getPixel / img:setPixel (et img:getIndex / img:setIndex sur les sprites indexés) sans coût par appel, puis que tu réécris avec app.putImage en une seule modification. L'Image couvre rect (tout le canevas par défaut), et ses coordonnées commencent à 0, 0 en haut à gauche de rect ; img.x, img.y mémorisent où cela se trouve sur le canevas, c'est là qu'app.putImage l'écrit par défaut. Les pixels sans cel sont lus comme transparents. Un cel lié lit son image partagée. Calques d'image uniquement (images de tuiles : app.getTilePixels).
layerId(string)frameId(string)rect(table, facultatif) — La zone à lire, { x, y, width, height } sur le canevas (entiers ; width et height de 1 à 4096). Omis = tout le canevas.x(integer) — Bord gauche.y(integer) — Bord supérieur.width(integer 1–4096) — Largeur en pixels.height(integer 1–4096) — Hauteur en pixels.
Renvoie (image) : Une Image (voir img:getPixel et les autres méthodes img:).
app.newImage(width, height, colorMode?) — lit
Une Image vide (transparente), en x = 0, y = 0 : un tampon de travail pour construire des pixels avant app.putImage, ou pour les estamper sur d'autres images avec img:drawImage. Une Image indexée utilise la palette du sprite.
width(number) — 1-4096.height(number) — 1-4096.colorMode(ColorMode: "rgba" | "grayscale" | "indexed", facultatif) — Par défaut celui du sprite. "rgba" sur un sprite indexé donne une image de travail en couleurs complètes (app.putImage convertit ensuite ses couleurs vers la palette).
Renvoie (image) : Une Image (voir img:getPixel et les autres méthodes img:).
app.pixelColor.rgba(r, g, b, a?) — pure
Empaquète une couleur dans un entier de pixel, la forme que renvoie img:getPixel et que img:setPixel prend le plus vite (comme dans Aseprite).
r(number) — 0-255.g(number) — 0-255.b(number) — 0-255.a(number, facultatif) — 0-255, 255 par défaut.
Renvoie (number) : r | g << 8 | b << 16 | a << 24.
app.pixelColor.rgbaA(pixel) — pure
L'alpha d'un pixel empaqueté.
pixel(number) — Un pixel empaqueté.
Renvoie (number) : 0-255.
app.pixelColor.rgbaB(pixel) — pure
Le bleu d'un pixel empaqueté.
pixel(number) — Un pixel empaqueté.
Renvoie (number) : 0-255.
app.pixelColor.rgbaG(pixel) — pure
Le vert d'un pixel empaqueté.
pixel(number) — Un pixel empaqueté.
Renvoie (number) : 0-255.
app.pixelColor.rgbaR(pixel) — pure
Le rouge d'un pixel empaqueté.
pixel(number) — Un pixel empaqueté.
Renvoie (number) : 0-255.
app.putImage(layerId, frameId, image, x?, y?) — modifie, annulable, refusée sur un calque verrouillé
Écrit une Image dans le cel d'un calque/d'une image d'animation : chaque pixel du rectangle qu'elle couvre est remplacé (sans fusion), en une seule modification quel que soit le nombre de pixels définis. Le cel s'agrandit pour la contenir et est rogné à ses pixels visibles ; ce qui tombe hors du canevas est abandonné. Écriture brute : jamais limitée à la sélection ni en miroir. Sur un sprite indexé, chaque pixel garde son index de palette (img:setIndex), sauf si la palette a changé depuis et que cette entrée n'affiche plus la couleur du pixel ; sur un sprite en niveaux de gris, les couleurs deviennent grises. Écrire dans un cel lié modifie toutes les images auxquelles il est lié.
layerId(string)frameId(string)image(image) — L'Image à écrire.x(number, facultatif) — Où atterrit son pixel supérieur gauche ; image.x par défaut (là où app.getImage l'a lue, 0 pour app.newImage).y(number, facultatif) — image.y par défaut.
Ne renvoie rien.
img:clear(x?, y?, width?, height?) — pure
Rend transparent un rectangle de l'image (toute l'image par défaut) (l'index transparent sur les images indexées).
x(number, facultatif) — 0 par défaut.y(number, facultatif) — 0 par défaut.width(number, facultatif) — Par défaut jusqu'au bord droit.height(number, facultatif) — Par défaut jusqu'au bord inférieur.
Ne renvoie rien.
img:clone() — pure
Une copie de l'image (même taille, même position et même mode colorimétrique).
Renvoie (image) : Une nouvelle Image.
img:drawImage(image, x?, y?, opacity?, blendMode?) — pure
Dessine une autre Image sur celle-ci, fusionnée comme un calque (ses pixels transparents laissent celle-ci telle quelle). D'une image indexée sur une image indexée à pleine opacité, les index sont copiés.
image(image) — L'Image à dessiner.x(number, facultatif) — Où atterrit son coin supérieur gauche ; 0 par défaut.y(number, facultatif) — 0 par défaut.opacity(number, facultatif) — 0-255, 255 par défaut.blendMode(string, facultatif) — Un BlendMode, "normal" par défaut.
Ne renvoie rien.
img:fill(color, x?, y?, width?, height?) — pure
Remplit un rectangle de l'image (toute l'image par défaut) d'une seule couleur.
color(color) — Un pixel empaqueté (app.pixelColor.rgba(r, g, b, a), ce que renvoie img:getPixel), "#rrggbb[aa]" ou { r, g, b, a } (a vaut 255 par défaut).x(number, facultatif) — 0 par défaut.y(number, facultatif) — 0 par défaut.width(number, facultatif) — Par défaut jusqu'au bord droit.height(number, facultatif) — Par défaut jusqu'au bord inférieur.
Ne renvoie rien.
img:getIndex(x, y) — pure
Images indexées uniquement : l'index de palette du pixel (à partir de 0, dans l'ordre de app.getPalette et app.setPaletteEntry), ce qui permet de distinguer des couleurs de palette en double. Hors de l'image : l'index transparent.
x(number) — Colonne, 0 au bord gauche de l'image.y(number) — Ligne, 0 en haut.
Renvoie (number) : 0-255.
img:getPixel(x, y) — pure
La couleur d'un pixel, empaquetée dans un entier (la forme rapide : aucune table n'est créée). Sur une image indexée, c'est la couleur de palette de l'index du pixel (transparent pour l'index transparent). Hors de l'image : 0 (transparent). x et y doivent être des entiers.
x(number) — Colonne, 0 au bord gauche de l'image.y(number) — Ligne, 0 en haut.
Renvoie (number) : Le pixel empaqueté r | g << 8 | b << 16 | a << 24 : décompose-le avec app.pixelColor (ou & 255, >> 8 ...).
img:setIndex(x, y, index) — pure
Images indexées uniquement : définit exactement l'index de palette du pixel, même vers l'une de deux entrées de même couleur (cycle de palette, échanges d'index).
x(number) — Colonne, 0 au bord gauche de l'image.y(number) — Ligne, 0 en haut.index(number) — Un index de palette, à partir de 0.
Ne renvoie rien.
img:setPixel(x, y, color) — pure
Définit la couleur d'un pixel. Accepte les mêmes couleurs que les commandes de dessin, plus les pixels empaquetés, et refuse tout le reste ({ red = ... }, une liste, une chaîne hexadécimale invalide) avec une erreur. Sur une image indexée, la couleur devient l'entrée de palette la plus proche, en gardant l'index du pixel quand cette entrée affiche déjà la couleur (img:setIndex choisit un index exact) ; sur une image en niveaux de gris, elle devient grise. Hors de l'image, rien ne se passe.
x(number) — Colonne, 0 au bord gauche de l'image.y(number) — Ligne, 0 en haut.color(color) — Un pixel empaqueté (app.pixelColor.rgba(r, g, b, a), ce que renvoie img:getPixel), "#rrggbb[aa]" ou { r, g, b, a } (a vaut 255 par défaut).
Ne renvoie rien.
En Markdown : images.md.