Fondu d'image ???

oubaouba Messages postés 3 Date d'inscription mercredi 13 novembre 2002 Statut Membre Dernière intervention 25 novembre 2002 - 15 nov. 2002 à 14:17
oubaouba Messages postés 3 Date d'inscription mercredi 13 novembre 2002 Statut Membre Dernière intervention 25 novembre 2002 - 16 nov. 2002 à 14:50
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

JHelp Messages postés 261 Date d'inscription jeudi 5 septembre 2002 Statut Membre Dernière intervention 6 octobre 2005 11
16 nov. 2002 à 07:28
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
0
oubaouba Messages postés 3 Date d'inscription mercredi 13 novembre 2002 Statut Membre Dernière intervention 25 novembre 2002
16 nov. 2002 à 14:50
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;
}

}
0
Rejoignez-nous