Fondu d'image ???

Signaler
Messages postés
3
Date d'inscription
mercredi 13 novembre 2002
Statut
Membre
Dernière intervention
25 novembre 2002
-
Messages postés
3
Date d'inscription
mercredi 13 novembre 2002
Statut
Membre
Dernière intervention
25 novembre 2002
-
je suis en train de creer une applet qui permettrait, à partir d'une image, de la faire apparaitre ou disparaitre grace à un fondu.

pour cela j'utilise un PixelGrabber pour récupérer le tableau contenant tous les pixels de l'image.
ensuite je transmet le tableau de pixels à un MemoryImageSource qui me permettrait (normalement!!!) d'actualiser la couleur des pixels au fur et à mesure du thread grace à newPixels().
pour le fondu je fais varier le composant alpha des pixels.

Bien entendu cela ne fonctionne pas!!!
si quelqu'un pouvait me donner une piste je lui serais très reconnaissant. merci. 8-)

2 réponses

Messages postés
261
Date d'inscription
jeudi 5 septembre 2002
Statut
Membre
Dernière intervention
6 octobre 2005
11
As-tu bien initialiser ton memory image source ?
<code>
    //Initialise l'image
    imageMemoire = new MemoryImageSource(largeur,hauteur,model,pixels,0,largeur);
    //L'image est animée
    imageMemoire.setAnimated(true);
    //On met à jour l'image en entière (Le buffer est copié d'un coup)
    imageMemoire.setFullBufferUpdates(true);

</code>
les deux lignes suivants la construction de la memoryImage doivent toujours se trouver juste aprés elle. En tout cas avant tout ajout, retrait, affichage de pixel de l'image.

JHelp
Messages postés
3
Date d'inscription
mercredi 13 novembre 2002
Statut
Membre
Dernière intervention
25 novembre 2002

merci de m'avoir répondu.Javais déjà fait ce que tu m'as conseillé.
voici mon code.

import java.awt.*;
import java.awt.image.*;
import java.applet.*;

public class anim extends Applet implements Runnable{

Image img, resImg;
MediaTracker tracker;
MemoryImageSource monSource;
PixelGrabber monGrabber;
int[] tabPix;
Thread monThread;

public void init() {
//création de l'image
img = getImage(getCodeBase(),"boat.gif");

//création du tracker
tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try{
tracker.waitForID(0);
}catch (InterruptedException ie) {}

//initialisation du tableau de pixel
tabPix = new int[img.getWidth(this) * img.getHeight(this)];

//instanciation d'un pixelGrabber
monGrabber = new PixelGrabber(img, 0, 0, img.getWidth(this), img.getHeight(this), tabPix, 0, img.getHeight(this));
//récupération des pixels
try{
monGrabber.grabPixels();
}catch(InterruptedException ie){
System.err.println("interrupted waiting for pixels!");
return;
}

//instanciation d'un memoryImageSource
monSource = new MemoryImageSource(img.getWidth(this), img.getHeight(this),tabPix, 0, img.getWidth(this));

//permettre les animations
monSource.setAnimated(true);
monSource.setFullBufferUpdates(true);

//création de l'image resImg = createImage(monSource);
}

public void start(){
//création et démarrage du thread
monThread = new Thread(this);
monThread.start();
}

public void paint(Graphics g) {
//envoie des nouveaux pixels au memoryImageSource
monSource.newPixels(0, 0, img.getWidth(this),img.getHeight(this));
g.drawImage(resImg, 0, 0, this);
}

public void run(){
while(monThread.isAlive()){
try{
monThread.sleep(100);
}catch(InterruptedException ie){}
//transformation des pixels du tableau
transAlpha(tabPix);
repaint();
}
}

public void update(Graphics g) {
paint(g);
}

public void transAlpha(int[] tabPixRec){
//transformation de chaque pixel
for(int i=0;i<tabPixRec.length;i++){
tabPixRec[i] = filter(tabPixRec[i]); }
}

public int filter(int pixel){
//récupération des valeurs des pixels
int alpha = (pixel & 0xff000000) >> 24,
red = (pixel & 0xff0000) >> 16,
green = (pixel & 0xff00) >> 8,
blue = pixel & 0xff;
return traitCoulPix(alpha, red, green, blue);
}

int traitCoulPix(int a, int r, int g, int b) {
//chaque composant alpha est diminué de 50 if(a 0){}else{a a - 50;}
return a << 24 | r << 16 | g << 8 | b;
}

}