Only_Dead_Fish_Go_With_The_Flow Code de traitement pour la construction d'images animées multi-images

Animations Grille barrière (ou Scanimations® -voir de endnote- comme référence ailleurs) sont amusants.

Voir cette belle vidéo en brusspup sur YouTube pour comprendre rapidement le concept.

J'ai écrit un outil logiciel pour produire l'image et le masque lié à voir.
le code est écrit dans le traitement. Elle produit l'image et le masque connexe.

Mon logiciel prend essentiellement un certain nombre d'images en entrée qui doivent être considérés à construire les cadres de l'animation. Vous pouvez modifier le paramètre pour définir le nombre d'images que vous souhaitez utiliser. En général, vous pouvez aller avec 4 et 6 est probablement le maximum, sinon l'animation est trop sombre, parce que l'effet final réduit la luminosité de l'image sensiblement.

Si vous utilisez 4 cadres, seulement un quart des colonnes de pixels sont visibles à un moment donné, ce qui réduit la luminosité globale à 25% de l'original.
Si vous utilisez 6 images, la luminosité finale va à 17% de l'original.

Comme les images de la source, il est préférable d'utiliser des images de contraste élevé, par exemple un peu de contraste élevé des formes sombres sur fond blanc. J'ai essayé avec des photos prises de ma webcam, mais les résultats étaient assez pauvres.

paramétrisation simple est nécessaire dans la source, pour adapter à votre séquence d'images d'entrée et de la résolution de sortie.


Impression de la transparence du masque et l'image multi-images
Un autre problème délicat peut être l'impression du masque bitmap. J'ai utilisé une imprimante laser standard et imprimé sur des imprimantes au format A4 transparencies.Usually tramage et anti accomplir un aliasing et d'introduire leurs « améliorations » sur les données imprimées, mais pour ce travail d'impression ne nous pas besoin de demi-teintes.

Bien sûr, vous devez effectuer l'échelle de l'image suivant exactement les mêmes règles. proportion de la taille exacte entre la largeur des colonnes de pixels doit être préservée et doit être le même dans le masque et dans l'image.


Vue détaillée
Pour une meilleure compréhension, voici un zoom détail d'une partie d'image multi-images, préparé pour 6 cadres d'animation:
.

Only_Dead_Fish_Go_With_The_Flow Code de traitement pour la construction d'images animées multi-images


Et voici un zoom détail correspondant de pixel individuel du masque pour 6 images d'animation. Vous pouvez voir 1 colonne transparente et 5 colonnes opaques

Only_Dead_Fish_Go_With_The_Flow Code de traitement pour la construction d'images animées multi-images

Voici le code de traitement.

int nframes = 6;
int maxx, maxy;
int cframe = 1;
int xsize = 320; // image redimensionnée
int ysize = 240;

String [] FNAME = new String [nframes];
Chaîne prjname = "giulio"; // Nom du projet: partie initiale commune des noms de fichiers d'image d'entrée

PImage [] frame = new pImage [nframes]; // séquence de la trame initiale à traiter
PImage scanimage; // résultant scanimage multi-images
PImage MaskImage; // masque

void setup () pour (int i = 0; i < nframes; i++) < // cycle on input frames
FNAME [i] = prjname + "-" + i + ".jpg";
println (fname [i]);
Cadre [i] = chargelmage (fname [i]); // read frame
Cadre [i] .resize (xsize, ysize);
>
maxx = cadre [0] .Width;
maxy = cadre [0] .height;
scanimage = createImage (maxx, maxy, ARGB); // scanimage de sortie

for (int f = 0; f < nframes; f++) < // cycle on input frames
for (int c = 0; c < maxx; c += nframes ) < // columns to keep of this frame
for (int y = 0; y < maxy-1; y++) < // cycle on each pixel of the column
scanimage.pixels [maxx * y + f + c] = cadre [f] .pixels [maxx * y + f + c];
>
>
>
scanimage.save (prjname + "_scanimage.png"); // sauvegarde résultant scanimage


// préparation du masque et la génération de fichier
MaskImage = createImage (maxx, maxy, RGB);
for (int x = 0; x < maskimage.width; x += nframes ) for (int y = 0; y < maskimage.height; y++ ) maskimage.pixels[xsize * y + x] = color(255,255,255);
>
>
maskimage.save (prjname + "_mask.png");

// préparer affichage à l'écran de scanimage
taille (maxx, maxy);
>


fond void draw () (255);
l'image (scanimage, 0,0);
accident vasculaire cérébral (0); // dessine un masque sur le dessus de l'image
for (int c = cframe; c < scanimage.width; c += nframes ) for (int b=0; b < (nframes -1); b++) line(c+b,0,c+b,scanimage.height);
>
>
>

annuler mousePressed () < // when click shift mask
cframe = (cframe + 1)% nframes;
println ( "cframe =" + cframe);
>

Certo che mi potrà contattare.
Dans qualsiasi momento.

Sono molto de alle poursuivre en justice esperienze Didattiche. Anche dans virtù del fatto che sono papà di due di bimbi 14 e 11 anni.

Le segnalo anche il linguaggio traitement, e il fantastico prodotto arduino. (Guardi le pagine ad Alcuni par rapport à miei Progetti merito).

Articles Liés